Untuk Laravel 5.3 ke atas
Periksa jawaban Scott di bawah ini.
Untuk Laravel 5 hingga 5.2
Sederhananya,
Pada middleware auth:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
Saat aksi masuk:
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('defaultpage');
}
Untuk Laravel 4 (jawaban lama)
Pada saat jawaban ini tidak ada dukungan resmi dari kerangka itu sendiri. Saat ini Anda dapat menggunakannyametode yang ditunjukkan oleh bgdrl di bawah inimetode ini: (Saya sudah mencoba memperbarui jawabannya, tetapi sepertinya dia tidak akan menerima)
Pada filter auth:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
Saat aksi masuk:
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return Redirect::intended('defaultpage');
}
Untuk Laravel 3 (jawaban yang lebih lama)
Anda bisa menerapkannya seperti ini:
Route::filter('auth', function() {
// If there's no user authenticated session
if (Auth::guest()) {
// Stores current url on session and redirect to login page
Session::put('redirect', URL::full());
return Redirect::to('/login');
}
if ($redirect = Session::get('redirect')) {
Session::forget('redirect');
return Redirect::to($redirect);
}
});
// on controller
public function get_login()
{
$this->layout->nest('content', 'auth.login');
}
public function post_login()
{
$credentials = [
'username' => Input::get('email'),
'password' => Input::get('password')
];
if (Auth::attempt($credentials)) {
return Redirect::to('logged_in_homepage_here');
}
return Redirect::to('login')->with_input();
}
Menyimpan pengalihan pada Sesi memiliki manfaat bertahan meskipun pengguna tidak mengetik kredensial atau dia tidak memiliki akun dan harus mendaftar.
Ini juga memungkinkan hal lain selain Auth untuk mengatur pengalihan pada sesi dan itu akan bekerja secara ajaib.
Laravel> = 5.3
Perubahan Auth di 5.3 membuat implementasi ini sedikit lebih mudah, dan sedikit berbeda dari 5.2 karena Auth Middleware telah dipindahkan ke wadah layanan.
Ubah pengalihan autor Middleware baru
Ubah sedikit fungsi pegangan, sehingga terlihat seperti:
TL; penjelasan DR
Satu-satunya perbedaan adalah di baris ke-4; secara default tampilannya seperti ini:
Karena Laravel> = 5.3 secara otomatis menyimpan rute "yang dimaksudkan" terakhir ketika memeriksa Auth Guard, itu berubah menjadi:
Itu memberitahu Laravel untuk mengarahkan ulang ke halaman yang dituju sebelum masuk, jika tidak pergi ke "/ home" atau ke mana pun Anda ingin mengirimnya secara default.
Semoga ini bisa membantu orang lain - tidak banyak perbedaan antara 5,2 dan 5,3, dan di bidang ini khususnya ada beberapa.
sumber
return redirect()->intended(RouteServiceProvider::HOME);
untuk menjaga jalur rumah Anda di satu tempat.Saya menemukan dua metode hebat yang mungkin sangat membantu Anda.
Anda dapat menerapkan filter ini ke rute yang perlu otentikasi.
Apa metode ini pada dasarnya adalah untuk menyimpan halaman yang Anda coba kunjungi dan itu mengarahkan Anda ke halaman login .
Ketika pengguna diautentikasi, Anda dapat menelepon
dan itu akan mengarahkan Anda ke halaman yang Anda coba jangkau pada awalnya.
Ini cara yang bagus untuk melakukannya walaupun saya biasanya menggunakan metode di bawah ini.
Anda dapat memeriksa blog yang luar biasa ini .
sumber
Anda dapat menggunakan fungsi Redirect :: yang dimaksudkan . Ini akan mengarahkan pengguna ke URL yang mereka coba akses sebelum ditangkap oleh filter autentik. URI mundur dapat diberikan untuk metode ini jika takdir tujuan yang dimaksud tidak tersedia.
Di pos masuk / daftar:
sumber
Saya telah menggunakan ini untuk sementara waktu pada kode pemilih bahasa saya. Selama Anda hanya perlu kembali dengan hanya 1 halaman berfungsi dengan baik:
Ini bukan solusi yang paling kuat di luar sana tetapi sangat mudah dan dapat membantu memecahkan beberapa teka-teki. :)
sumber
Ubah konstruktor LoginControllers Anda menjadi:
Ini akan mengarahkan Anda kembali ke halaman SEBELUM halaman login (2 halaman kembali).
sumber
ini akan mengarahkan Anda ke halaman default proyek Anda yaitu halaman awal.
sumber
Untuk laravel 5. * coba ini.
atau
sumber
Laravel 3
Saya mengubah sedikit kode (Vinícius Fragoso Pinheiro) Anda sedikit, dan menempatkan yang berikut ini di filter.php
Dan kemudian di dalam AuthController.php saya:
Perhatikan bahwa
'redirect'
data sesi direfleksikan jika ada masalah otentikasi. Ini menjaga pengalihan tetap utuh selama kecelakaan login, tetapi jika pengguna mengklik pada titik mana pun, proses login berikutnya tidak terganggu oleh data sesi.Anda juga perlu mem-reflash data pada titik yang menunjukkan formulir login di Anda
AuthController
, jika tidak rantai rusak:sumber
Menggunakan
Redirect;
Kemudian gunakan ini:
sumber
Larvel 5.3 ini benar-benar bekerja untuk saya dengan hanya memperbarui LoginController.php
ref: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
sumber
Untuk Laravel 5.5 dan mungkin 5.4
Di App \ Http \ Middleware \ RedirectIfAuthenticated, ubah
redirect('/home')
keredirect()->intended('/home')
dalam fungsi pegangan:di App \ Http \ Controllers \ Auth \ LoginController membuat
showLoginForm()
fungsi sebagai berikut:Dengan cara ini jika ada maksud untuk halaman lain maka akan dialihkan ke sana jika tidak maka akan mengarahkan pulang.
sumber
Saya menggunakan pendekatan berikut dengan pengontrol login kustom dan middleware untuk Laravel 5.7, tapi saya harap itu berfungsi di salah satu dari versi laravel 5
di dalam middleware
metode login pengendali dalam
Jika Anda harus meneruskan URL yang dimaksudkan ke sisi klien , Anda dapat mencoba yang berikut ini
sumber
Pertama, Anda harus tahu, bagaimana Anda mengarahkan pengguna ke rute 'login':
Tidak seperti ini:
sumber
Laravel sekarang mendukung fitur ini di luar kotak! (Saya percaya sejak 5,5 atau sebelumnya).
Tambahkan
__construct()
metode ke AndaController
seperti yang ditunjukkan di bawah ini:Setelah masuk, pengguna Anda akan diarahkan ke halaman yang ingin mereka kunjungi pada awalnya.
Anda juga dapat menambahkan fitur verifikasi email Laravel seperti yang dipersyaratkan oleh logika aplikasi Anda:
Dokumentasi berisi contoh yang sangat singkat:
Mungkin juga untuk memilih metode pengontrol mana middleware berlaku dengan menggunakan
except
atauonly
opsi.Contoh dengan
except
:Contoh dengan
only
:Informasi lebih lanjut tentang
except
danonly
opsi middleware:sumber
jika Anda menggunakan axios atau pustaka javascript AJAX lainnya, Anda mungkin ingin membuka kembali url dan meneruskan ke ujung depan
Anda dapat melakukannya dengan kode di bawah ini
Ini akan mengembalikan string yang diformat json
sumber
Dalam Laravel 5.8
di App \ Http \ Controllers \ Auth \ LoginController tambahkan metode berikut
di App \ Http \ Middleware \ RedirectIfAuthenticated, ganti "return redirect ('/ home');" dengan yang berikut ini
sumber
Apakah Anda mencoba ini di routes.php Anda?
sumber
sumber
Ini solusi saya untuk 5.1. Saya membutuhkan seseorang untuk mengklik tombol "Suka" pada posting, diarahkan untuk login, lalu kembali ke halaman asli. Jika sudah masuk, tombol
href
"Suka" dicegat dengan JavaScript dan diubah menjadi permintaan AJAX.Tombolnya seperti
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
ditangani oleh LikeController yang membutuhkanauth
middleware.Di middleware Otentikasi (
handle()
fungsi), tambahkan sesuatu seperti ini di awal:Ubah
/auth/login
ke apa pun URL Anda untuk masuk. Kode ini menyimpan URL halaman asli dalam sesi kecuali URL adalah URL login. Ini diperlukan karena tampaknya seolah-olah middleware ini dipanggil dua kali. Saya tidak yakin mengapa atau apakah itu benar. Tetapi jika Anda tidak memeriksa persyaratan itu, itu akan sama dengan halaman asli yang benar, dan kemudian entah bagaimana kebetulan/auth/login
. Mungkin ada cara yang lebih elegan untuk melakukan ini.Kemudian, di
LikeController
atau pengontrol apa pun yang Anda miliki yang menangani URL untuk tombol yang ditekan pada halaman asli:Metode ini sangat sederhana, tidak perlu mengabaikan fungsi apa pun yang ada, dan berfungsi dengan baik. Mungkin ada beberapa cara yang lebih mudah bagi Laravel untuk melakukan ini, tetapi saya tidak yakin apa itu. Menggunakan
intended()
fungsi tidak berfungsi dalam kasus saya karena LikeController perlu juga tahu apa URL sebelumnya untuk mengarahkan kembali ke sana. Pada dasarnya dua tingkat pengalihan ke belakang.sumber
Untuk Laravel 5.2 (versi sebelumnya saya tidak menggunakan)
Rekatkan kode ke aplikasi file \ Http \ Controllers \ Auth \ AurhController.php
Dan impor namespace:
use Session;
Jika Anda belum membuat perubahan apa pun pada aplikasi file \ Http \ Controllers \ Auth \ AurhController.php, Anda bisa menggantinya dengan file dari GitHub
sumber
Laravel 5.2
Jika Anda menggunakan Middleware lain seperti Admin middleware, Anda dapat mengatur sesi untuk url. Disengaja dengan menggunakan berikut ini:
Pada dasarnya kita perlu mengatur secara manual
\Session::put('url.intended', \URL::full());
untuk pengalihan.Contoh
Saat mencoba masuk
Pastikan untuk menggunakan upaya login
return \Redirect::intended('default_path');
sumber
redirect()->guest('login')
.Untuk Laravle 5.7, Anda perlu mengubahnya menjadi:
Ubah ini:
Untuk ini:
sumber
mypath
? (pass pengguna untuk kembali ke ini)