Diese Frage wurde schon früher gestellt, und ich glaube, dass mein Code korrekt ist, aber ich bekomme merkwürdiges Verhalten.
Ich muss den Benutzer nach der Anmeldung auf verschiedene Routen umleiten, abhängig von einigen Datenbankwerten. Ich dachte, dass ich dazu meine Logik einfach in die handle
-Methode von app/Http/Middleware/RedirectIfAuthenticated.php
legen musste. Meine Methode sieht momentan so aus:
Dies funktioniert nicht, und bei der Anmeldung wird der Benutzer zu /home
umgeleitet. Ich habe versucht, dd($this->auth->user())
innerhalb der $this->auth->check()
Bedingung zu setzen, aber es wird nie ausgeführt. Wenn ich es außerhalb dieser Prüfung platziere, wird es bei jeder Anfrage ausgeführt. Es sieht so aus, als ob $this->auth->check()
niemals ausgeführt wird.
Meine Frage: Wenn nicht hier, wo sollte diese Logik hingehen?
Ich habe auch protected $redirectTo = '/account';
vom Controller AuthController.php
entfernt.
Sie verwenden die Middleware nicht korrekt. Dieser Code wird jedes Mal ausgelöst, wenn Sie eine Anfrage senden, wenn Sie angemeldet sind.
Um den Umleitungsort nach der Anmeldung zu ändern, können Sie in Ihrem AuthController die Methode redirectPath()
überschreiben. (Sie finden die ursprüngliche Methode in vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php
)
Das würde ungefähr so aussehen:
%Vor% Hinweis: Ich habe die Methode $this->auth()
durch die Alternative Facade ( Auth::
) ersetzt. Nur weil ich nicht sicher bin, ob der AuthController eine auth()
Methode hat.
Ich denke, es ist so einfach, eine benutzerdefinierte Middleware-Klasse einzurichten, um Ihre Anforderungen basierend auf den Datenbankwerten zu validieren. Ich tue dies, um Benutzer ohne die korrekte Rolle auszuschließen.
Die Rolle ist in meiner Benutzertabelle definiert und nur Benutzer mit Administratorrechten dürfen auf das System zugreifen.
%Vor%
Sie können die Kerndateien von Laravel nicht ändern, Sie müssen nur diesen Code hinzufügen Auth \ AuthController
%Vor% Um zu verstehen, warum Ihre Routing-Logik nie erreicht wird, sollten Sie in app/Http/Kernel.php
suchen, wo die RedirectIfAuthenticated-Middleware registriert ist:
Dies bedeutet, wenn ein Benutzer zu einer Route navigiert, die nicht durch die guest
route-Middleware geschützt ist, durchläuft die Anfrage niemals die RedirectIfAuthenticated-Klasse und vermisst somit Ihre Logik vollständig.
Sie können Gast-Middleware zu Ihren Registrierungsrouten in Ihrer routes-Datei hinzufügen, um zu erzwingen, dass das Routing Ihren Code wie folgt durchläuft:
%Vor%Da Sie jedoch sagen, dass der Benutzer bereits angemeldet ist (kein Gast), sollten Sie stattdessen Ihren Code wie von den anderen Antworten vorgeschlagen verschieben.
Dies nur als Antwort hinzufügen, weil es in dem durch einen Kommentar erlaubten Platz nicht geklärt werden konnte.
Tags und Links php authentication laravel laravel-5.1