Redirect wenn authentifizierte Logik in Laravels eingebauter Auth?

8

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:

%Vor%

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.

    
Mike 26.10.2015, 08:12
quelle

5 Antworten

2

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.

    
Mark Walet 02.08.2016, 10:29
quelle
1

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%     
0x1ad2 28.10.2015 09:13
quelle
1

Lösung ist in Mark Walets Antwort, aber braucht wenig Korrektur. Die Rückgabe sollte eine Zeichenfolge sein:

%Vor%     
Dmitry 06.12.2016 01:11
quelle
0

Sie können die Kerndateien von Laravel nicht ändern, Sie müssen nur diesen Code hinzufügen Auth \ AuthController

%Vor%     
Amir Tahani 04.07.2016 13:43
quelle
0

Um zu verstehen, warum Ihre Routing-Logik nie erreicht wird, sollten Sie in app/Http/Kernel.php suchen, wo die RedirectIfAuthenticated-Middleware registriert ist:

%Vor%

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.

    
Jannie Theunissen 04.09.2017 10:06
quelle