Für Laravel 5.3 und höher
Überprüfen Sie Scotts Antwort unten.
Für Laravel 5 bis 5.2
Einfach gesagt,
Auf Auth Middleware:
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
Bei der Anmeldeaktion:
// 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');
}
Für Laravel 4 (alte Antwort)
Zum Zeitpunkt dieser Antwort gab es keine offizielle Unterstützung durch das Framework selbst. Heutzutage können Sie verwendendie Methode, auf die bgdrl unten hinweistdiese Methode: (Ich habe versucht, seine Antwort zu aktualisieren, aber es scheint, dass er nicht akzeptiert)
Beim Authentifizierungsfilter:
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
Bei der Anmeldeaktion:
// 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');
}
Für Laravel 3 (noch ältere Antwort)
Sie könnten es so implementieren:
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();
}
Das Speichern der Umleitung in einer Sitzung hat den Vorteil, dass sie auch dann beibehalten wird, wenn der Benutzer seine Anmeldeinformationen falsch eingegeben hat oder kein Konto hat und sich anmelden muss.
Dies ermöglicht auch, dass alles andere als Auth eine Umleitung für die Sitzung festlegt, und es funktioniert auf magische Weise.
Laravel> = 5,3
Die Auth-Änderungen in 5.3 erleichtern die Implementierung etwas und unterscheiden sich geringfügig von 5.2, da die Auth-Middleware in den Service-Container verschoben wurde.
Ändern Sie den neuen Middleware-Authentifizierungs-Redirector
Ändern Sie die Grifffunktion geringfügig, damit Folgendes aussieht:
TL; DR Erklärung
Der einzige Unterschied besteht in der 4. Zeile; Standardmäßig sieht es so aus:
Da Laravel> = 5.3 beim Überprüfen des Auth Guard automatisch die letzte "beabsichtigte" Route speichert, ändert sich diese in:
Das weist Laravel an, vor dem Anmelden zur zuletzt vorgesehenen Seite umzuleiten, andernfalls gehen Sie zu "/ home" oder wohin Sie sie standardmäßig senden möchten.
Ich hoffe, das hilft jemand anderem - es gibt nicht viel über die Unterschiede zwischen 5.2 und 5.3, und insbesondere in diesem Bereich gibt es einige.
quelle
return redirect()->intended(RouteServiceProvider::HOME);
, um Ihren Heimweg an einem Ort zu halten.Ich habe diese beiden großartigen Methoden gefunden, die für Sie äußerst hilfreich sein könnten.
Sie können diesen Filter auf die Routen anwenden, die authentifiziert werden müssen.
Diese Methode dient im Wesentlichen dazu, die Seite zu speichern, die Sie besuchen wollten, und leitet Sie zur Anmeldeseite weiter .
Wenn der Benutzer authentifiziert ist, können Sie anrufen
und es leitet Sie zu der Seite weiter, die Sie zuerst erreichen wollten.
Es ist eine großartige Möglichkeit, dies zu tun, obwohl ich normalerweise die folgende Methode verwende.
Sie können diesen fantastischen Blog überprüfen .
quelle
Sie können die Funktion Redirect :: beabsichtigte verwenden. Der Benutzer wird zu der URL umgeleitet, auf die er zugreifen wollte, bevor er vom Authentifizierungsfilter abgefangen wird. Für diese Methode kann ein Fallback-URI angegeben werden, falls das beabsichtigte Ziel nicht verfügbar ist.
In der Post Login / Register:
quelle
Ich benutze dies seit einer Weile für meinen Sprachauswahlcode. Solange Sie nur 1 Seite zurückgehen müssen, funktioniert es einwandfrei:
Es ist nicht die leistungsstärkste Lösung, aber es ist super einfach und kann helfen, ein paar Rätsel zu lösen. :) :)
quelle
Ändern Sie Ihren LoginControllers-Konstruktor in:
Sie werden vor der Anmeldeseite (2 Seiten zurück) zur Seite zurückgeleitet.
quelle
Dadurch werden Sie zur Standardseite Ihres Projekts weitergeleitet, dh zur Startseite.
quelle
Für Laravel 5. * versuchen Sie diese.
oder
quelle
Laravel 3
Ich habe Ihren Code (Vinícius Fragoso Pinheiro) leicht angepasst und Folgendes in filter.php eingefügt
Und dann in meiner AuthController.php:
Beachten Sie, dass die
'redirect'
Sitzungsdaten erneut aktualisiert werden, wenn ein Authentifizierungsproblem vorliegt. Dadurch bleibt die Umleitung bei Anmeldefehlern erhalten. Sollte der Benutzer jedoch zu irgendeinem Zeitpunkt wegklicken, wird der nächste Anmeldevorgang nicht durch die Sitzungsdaten unterbrochen.Sie müssen die Daten auch zum Zeitpunkt der Anzeige des Anmeldeformulars in Ihrem erneut flashen
AuthController
, da sonst die Kette unterbrochen wird:quelle
Verwenden
Redirect;
Dann benutze dies:
quelle
Für Laravel 5.5 und wahrscheinlich 5.4
Im App \ Http \ Middleware \ RedirectIfAuthenticated Änderung
redirect('/home')
anredirect()->intended('/home')
im Griff Funktion:Erstellen Sie in App \ Http \ Controllers \ Auth \ LoginController die
showLoginForm()
Funktion wie folgt:Auf diese Weise wird eine andere Seite umgeleitet, wenn sie beabsichtigt ist, andernfalls wird sie nach Hause umgeleitet.
quelle
Ich verwende den folgenden Ansatz mit einem benutzerdefinierten Login-Controller und Middleware für Laravel 5.7, hoffe jedoch, dass dies in jeder der Laravel 5-Versionen funktioniert
in der Middleware
Anmeldemethode innerhalb des Controllers
Wenn Sie die beabsichtigte URL an die Clientseite übergeben müssen , können Sie Folgendes versuchen
quelle
Zunächst sollten Sie wissen, wie Sie den Benutzer zur Anmelderoute umleiten:
So nicht:
quelle
Laravel unterstützt diese Funktion jetzt sofort! (Ich glaube seit 5.5 oder früher).
Fügen Sie eine
__construct()
Methode zu Ihrer hinzu,Controller
wie unten gezeigt:Nach der Anmeldung werden Ihre Benutzer zu der Seite weitergeleitet, die sie ursprünglich besuchen wollten.
Sie können auch die E-Mail-Überprüfungsfunktion von Laravel hinzufügen, wie es Ihre Anwendungslogik erfordert:
Die Dokumentation enthält ein sehr kurzes Beispiel:
Sie können auch mithilfe von
except
oderonly
Optionen auswählen, auf welche Controller-Methoden die Middleware angewendet wird.Beispiel mit
except
:Beispiel mit
only
:Weitere Informationen zu
except
undonly
Middleware-Optionen:quelle
Wenn Sie Axios oder eine andere AJAX-Javascript-Bibliothek verwenden, möchten Sie möglicherweise die URL abrufen und an das Front-End übergeben
Sie können dies mit dem folgenden Code tun
Dies gibt eine json-formatierte Zeichenfolge zurück
quelle
In Laravel 5.8
Fügen Sie unter App \ Http \ Controllers \ Auth \ LoginController die folgende Methode hinzu
Ersetzen Sie in App \ Http \ Middleware \ RedirectIfAuthenticated "return redirect ('/ home');" durch Folgendes
quelle
Haben Sie dies in Ihrer route.php versucht?
quelle
quelle
Hier ist meine Lösung für 5.1. Ich brauchte jemanden, der auf die Schaltfläche "Gefällt mir" in einem Beitrag klickt, zum Anmelden weitergeleitet wird und dann zur ursprünglichen Seite zurückkehrt. Wenn sie bereits angemeldet waren, wird die
href
Schaltfläche "Gefällt mir" mit JavaScript abgefangen und in eine AJAX-Anfrage umgewandelt.Der Knopf ist so etwas wie
<a href="https://stackoverflow.com/like/931">Like This Post!</a>
./like/931
wird von einem LikeController verwaltet, der dieauth
Middleware benötigt .Fügen Sie in der Middleware Authentifizieren (der
handle()
Funktion) zu Beginn Folgendes hinzu:Ändern
/auth/login
Sie die URL für die Anmeldung. Dieser Code speichert die URL der Originalseite in der Sitzung, es sei denn, die URL ist die Anmelde-URL. Dies ist erforderlich, da diese Middleware anscheinend zweimal aufgerufen wird. Ich bin mir nicht sicher warum oder ob das stimmt. Wenn Sie diese Bedingung jedoch nicht überprüfen, entspricht sie der korrekten Originalseite und wird dann irgendwie zu/auth/login
. Es gibt wahrscheinlich einen eleganteren Weg, dies zu tun.Dann in dem
LikeController
oder einem anderen Controller, der die URL für die auf der Originalseite gedrückte Schaltfläche verarbeitet:Diese Methode ist sehr einfach, erfordert keine Überschreibung vorhandener Funktionen und funktioniert hervorragend. Es ist möglich, dass es für Laravel einen einfacheren Weg gibt, dies zu tun, aber ich bin mir nicht sicher, was es ist. Die Verwendung der
intended()
Funktion funktioniert in meinem Fall nicht, da der LikeController auch wissen musste, wie die vorherige URL lautete, um darauf zurückzuleiten. Im Wesentlichen zwei Umleitungsebenen nach hinten.quelle
Für Laravel 5.2 (frühere Versionen habe ich nicht verwendet)
Fügen Sie den Code in die Datei app \ Http \ Controllers \ Auth \ AurhController.php ein
Und Namespace importieren:
use Session;
Wenn Sie keine Änderungen an der Datei app \ Http \ Controllers \ Auth \ AurhController.php vorgenommen haben, können Sie sie einfach durch die Datei aus dem GitHub ersetzen
quelle
Laravel 5.2
Wenn Sie eine andere Middleware wie die Admin- Middleware verwenden, können Sie eine Sitzung für url.intended festlegen, indem Sie Folgendes verwenden:
Grundsätzlich müssen wir manuell
\Session::put('url.intended', \URL::full());
für die Umleitung einstellen .Beispiel
Beim Anmeldeversuch
Stellen Sie sicher, dass Sie beim Anmeldeversuch verwenden
return \Redirect::intended('default_path');
quelle
redirect()->guest('login')
ist es da.Larvel 5.3 hat bei mir tatsächlich funktioniert, indem ich nur LoginController.php aktualisiert habe
Ref: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login
quelle
Für Laravle 5.7 müssen Sie folgende Änderungen vornehmen:
Ändere das:
Dazu:
quelle
mypath
? (Benutzerpass für zurück zu diesem)