Dla Laravel 5.3 i nowszych
Sprawdź odpowiedź Scotta poniżej.
Dla Laravel 5 do 5.2
Po prostu,
W przypadku oprogramowania pośredniego uwierzytelniania:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
Podczas akcji logowania:
// 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');
}
Dla Laravela 4 (stara odpowiedź)
W chwili udzielania odpowiedzi nie było oficjalnego wsparcia ze strony samych ram. W dzisiejszych czasach możesz używaćmetoda wskazana przez bgdrl poniżejta metoda: (Próbowałem zaktualizować jego odpowiedź, ale wygląda na to, że nie zaakceptuje)
Na filtrze uwierzytelniania:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
Podczas akcji logowania:
// 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');
}
Dla Laravel 3 (nawet starsza odpowiedź)
Możesz to zaimplementować w następujący sposób:
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();
}
Przechowywanie przekierowania na Sesji ma tę zaletę, że trwa, nawet jeśli użytkownik nie wpisuje swoich danych logowania lub nie ma konta i musi się zarejestrować.
Pozwala to również na cokolwiek innego niż Auth, aby ustawić przekierowanie na sesję i będzie działać magicznie.
Laravel> = 5,3
Zmiany Auth w 5.3 sprawiają, że implementacja tego jest nieco łatwiejsza i nieco inna niż 5.2, ponieważ Auth Middleware zostało przeniesione do kontenera usług.
Zmodyfikuj nowy readresator uwierzytelniania oprogramowania pośredniego
Zmień nieco funkcję uchwytu, aby wyglądało to tak:
Wyjaśnienie TL; DR
Jedyną różnicą jest czwarta linia; domyślnie wygląda to tak:
Ponieważ Laravel> = 5.3 automatycznie zapisuje ostatnią „zamierzoną” trasę podczas sprawdzania funkcji Auth Guard, zmienia się na:
To mówi Laravelowi, aby przekierował na ostatnią zamierzoną stronę przed zalogowaniem, w przeciwnym razie przejdź do „/ home” lub tam, gdzie chcesz je domyślnie wysłać.
Mam nadzieję, że pomoże to komuś innemu - niewiele jest różnic na temat różnic między 5.2 a 5.3, aw szczególności w tej dziedzinie jest ich sporo.
źródło
return redirect()->intended(RouteServiceProvider::HOME);
trzymać twoją domową ścieżkę w jednym miejscu.Znalazłem te dwie świetne metody, które mogą być dla ciebie niezwykle pomocne.
Możesz zastosować ten filtr do tras wymagających uwierzytelnienia.
Ta metoda w zasadzie polega na przechowywaniu strony, którą próbujesz odwiedzić, i przekierowuje Cię na stronę logowania .
Gdy użytkownik zostanie uwierzytelniony, możesz zadzwonić
i przekierowuje Cię na stronę, którą próbujesz otworzyć na początku.
To świetny sposób na zrobienie tego, chociaż zwykle używam poniższej metody.
Możesz sprawdzić ten niesamowity blog.
źródło
Możesz użyć funkcji Przekierowanie :: zamierzone . Przekieruje użytkownika do adresu URL, do którego próbował uzyskać dostęp, zanim zostanie złapany przez filtr uwierzytelniania. W przypadku tej metody można podać rezerwowy identyfikator URI, jeżeli zamierzone przeznaczenie nie jest dostępne.
W postu zaloguj / zarejestruj się:
źródło
Używam tego od jakiegoś czasu w kodzie wyboru języka. O ile wystarczy cofnąć tylko o jedną stronę, działa dobrze:
To nie jest najskuteczniejsze rozwiązanie, ale jest super łatwe i może pomóc rozwiązać kilka zagadek. :)
źródło
Zmień konstruktora LoginControllers na:
Nastąpi przekierowanie z powrotem do strony PRZED stroną logowania (2 strony wstecz).
źródło
spowoduje to przekierowanie do domyślnej strony twojego projektu, tj. strony początkowej.
źródło
W przypadku laravel 5. * wypróbuj te.
lub
źródło
Laravel 3
Lekko poprawiłem twój kod (Vinícius Fragoso Pinheiro) i umieściłem następujący kod w filter.php
A potem w moim AuthController.php:
Zwróć uwagę, że
'redirect'
dane sesji są reflasowane, jeśli występuje problem z uwierzytelnieniem. Dzięki temu przekierowanie pozostaje nienaruszone podczas jakichkolwiek wpadek logowania, ale jeśli użytkownik kliknie w dowolnym momencie, następny proces logowania nie zostanie zakłócony przez dane sesji.Musisz także ponownie załadować dane w miejscu, w którym pojawia się formularz logowania, w
AuthController
przeciwnym razie łańcuch zostanie zerwany:źródło
Posługiwać się
Redirect;
Następnie użyj tego:
źródło
Larvel 5.3 to faktycznie działało dla mnie po prostu aktualizując LoginController.php
ref: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
źródło
Dla Laravela 5.5 i prawdopodobnie 5.4
W App \ Http \ Middleware \ RedirectIfAuthentified zmień
redirect('/home')
naredirect()->intended('/home')
w funkcji uchwytu:w App \ Http \ Controllers \ Auth \ LoginController utwórz
showLoginForm()
funkcję w następujący sposób:W ten sposób, jeśli był zamiar dla innej strony, przekieruje tam, w przeciwnym razie przekieruje do domu.
źródło
Korzystam z następującego podejścia z niestandardowym kontrolerem logowania i oprogramowaniem pośrednim dla Laravel 5.7, ale mam nadzieję, że zadziała w dowolnej wersji laravel 5
w oprogramowaniu pośrednim
wewnątrz metody logowania do kontrolera
Jeśli musisz przekazać zamierzony adres URL stronie klienta , możesz wypróbować następujące czynności
źródło
Po pierwsze, powinieneś wiedzieć, w jaki sposób przekierowujesz użytkownika do trasy „logowania”:
Nie tak jak to:
źródło
Laravel obsługuje teraz tę funkcję od razu po wyjęciu z pudełka! (Wierzę od wersji 5.5 lub wcześniejszej).
Dodaj
__construct()
metodę do swojej,Controller
jak pokazano poniżej:Po zalogowaniu użytkownicy zostaną przekierowani na stronę, którą zamierzali odwiedzić na początku.
Możesz także dodać funkcję weryfikacji e-mail Laravela zgodnie z logiką aplikacji:
Dokumentacja zawiera bardzo krótki przykład:
Można również wybrać metody kontrolera, których oprogramowanie pośrednie ma dotyczyć, za pomocą opcji
except
lubonly
.Przykład z
except
:Przykład z
only
:Więcej informacji na temat opcji
except
ionly
oprogramowania pośredniego:źródło
jeśli używasz axios lub innej biblioteki javascript AJAX, możesz pobrać adres URL i przekazać go do interfejsu
możesz to zrobić za pomocą poniższego kodu
Zwróci ciąg sformatowany w formacie json
źródło
W Laravel 5.8
w App \ Http \ Controllers \ Auth \ LoginController dodaj następującą metodę
w aplikacji \ Http \ Middleware \ RedirectIfAuthenticated zamień „return redirect ('/ home');” na następujący
źródło
Próbowałeś tego w swoim route.php?
źródło
źródło
Oto moje rozwiązanie dla 5.1. Potrzebowałem kogoś, kto kliknie przycisk „Lubię to” w poście, zostanie przekierowany do logowania, a następnie wróci do oryginalnej strony. Jeśli byli już zalogowani, przycisk
href
„Lubię to” został przechwycony przez JavaScript i przekształcony w żądanie AJAX.Przycisk jest podobny
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
jest obsługiwany przez LikeController, który wymagaauth
oprogramowania pośredniego.W oprogramowaniu pośredniczącym Uwierzytelnij (
handle()
funkcja) dodaj na początku coś takiego:Zmień
/auth/login
na dowolny adres URL do logowania. Ten kod zapisuje adres URL oryginalnej strony w sesji, chyba że jest to adres URL logowania. Jest to wymagane, ponieważ wydaje się, że to oprogramowanie pośrednie jest wywoływane dwukrotnie. Nie jestem pewien, dlaczego lub czy to prawda. Ale jeśli nie sprawdzisz tego warunku, będzie on równy poprawnej oryginalnej stronie, a następnie jakoś się da/auth/login
. Jest to prawdopodobnie bardziej elegancki sposób na zrobienie tego.Następnie w
LikeController
dowolnym kontrolerze, który obsługuje adres URL przycisku wciśniętego na oryginalnej stronie:Ta metoda jest bardzo prosta, nie wymaga zastępowania żadnych istniejących funkcji i działa świetnie. Możliwe, że Laravel ma na to łatwiejszy sposób, ale nie jestem pewien, co to jest. Użycie tej
intended()
funkcji nie działa w moim przypadku, ponieważ LikeController musiał również wiedzieć, co poprzedni adres URL miał przekierować z powrotem do niego. Zasadniczo dwa poziomy przekierowania do tyłu.źródło
Dla Laravel 5.2 (poprzednich wersji nie korzystałem)
Wklej kod do aplikacji plikowej \ Http \ Controllers \ Auth \ AurhController.php
I zaimportuj przestrzeń nazw:
use Session;
Jeśli nie wprowadziłeś żadnych zmian w aplikacji plikowej \ Http \ Controllers \ Auth \ AurhController.php, możesz po prostu zastąpić ją plikiem z GitHub
źródło
Laravel 5.2
Jeśli używasz innego Middleware jak Admin oprogramowania pośredniego można ustawić sesję dla url.intended za pomocą tej czynności:
Zasadniczo musimy ustawić ręcznie
\Session::put('url.intended', \URL::full());
przekierowanie.Przykład
Podczas próby logowania
Upewnij się przy próbie logowania
return \Redirect::intended('default_path');
źródło
redirect()->guest('login')
jest.W przypadku Laravle 5.7 musisz wprowadzić zmiany w:
Zmień to:
Do tego:
źródło
mypath
? (użytkownik przechodzi do tego)