2016-04-18 17 views
1

Ich struggeling mit meinem Routing in meiner Laravel 5.2 Anwendung.Laravel 5.2 Redirect zur beabsichtigten URL nach Login

Das gewünschte Verhalten ist:

  1. nicht registrierter Benutzer trys geschützte Seite zuzugreifen
  2. Weitergeleitet
  3. Weitergeleitet (auf Erfolg) zu beabsichtigten Seite

Natürlich sollte der Benutzer Login auf sein "Dashboard" umgeleitet werden, wenn es keine beabsichtigte Seite gibt (wenn er sich aktiv angemeldet hat)

Beispiel:

/* Create a Payment | Only for registered Users (client) */ 
Route::post('payment', '[email protected]')->middleware('client'); 

Der Nutzer wird auf die Anmeldeseite umgeleitet werden, aber nach dem Login, wird er auf die Seite weitergeleitet, die ich in meinem AuthController definiert als $ RedirectTo

protected $redirectTo = '/backoffice'; 

Gibt es ein Weg, um die Umleitung zu so etwas wie (den bestimmungsgemäßen oder default) gesetzt

+0

Haben Sie versucht, z. 'return redirect() -> intended ('backoffice');' so? https://laravel.com/docs/5.2/authentication # authenticating-users –

+0

Ich habe vergessen zu sagen, dass ich die Standard-Authentifizierung von Laravel –

Antwort

1

Wenn Sie möchten, dass ein nicht angemeldeter Benutzer zu einer Anmeldeseite umleitet und nach einer erfolgreichen Anmeldung zu der gewünschten URL oder dem Standard zurückkehrt, der in Ihrer Variablen eingerichtet ist.

protected $redirectTo = '/backoffice'; 

Dann würden Sie wahrscheinlich so etwas verwenden.

return redirect()->guest('login'); 

Laravel die "intended.url" in der Sitzung für Sie halten und nach einer erfolgreichen Benutzer-Login-Umleitung zurück zu/Back-Office.

Hier ist eine weitere Antwort about various Laravel versions

+0

Ich musste zu dem Schluss kommen, dass Sie nicht auf eine Route umleiten können, indem Sie die Post-Daten beibehalten. Es wird immer eine Anfrage später bekommen. –

+1

Wenn ich es richtig mache, kann 'withInput()' in diesem Fall helfen. [Laravel alte Eingabe] (https://laravel.com/docs/5.2/requests#old-input) – scorer

1

fand ich heraus, dass AuthenticatesUsers Trait definiert in AuthenticatesUsers.php Funktion hat handleUserWasAuthenticated wo i t prüft, ob bei der Standardauthentifizierung von Laravel AuthController.php eine Methode authenticated definiert ist oder nicht. Wenn diese Methode nicht definiert ist, wird der Benutzer immer zu der Eigenschaft umgeleitet, die Sie in der Eigenschaft $redirectTo definiert haben. Der Benutzer wird nicht auf die beabsichtigte URL umgeleitet. Doch in AuthController.php wenn Sie definieren das Verfahren wie folgt:

protected function authenticated (Request $request, $user){ 
    //add ur custom actions after the user is authenticated 
} 

redirect()->intended() wird wie erwartet genau und nachdem der Benutzer authentifiziert ist, wird er an die beabsichtigten URL umgeleitet werden.

+1

verwenden möchte Wird dies auch nach der Registrierung aufgerufen werden? Wie oben erwähnt, ist das eigentliche Problem, dass Laravel es nicht erlaubt, die Post-Daten zu behalten und auf die beabsichtigte POST-Route/Anfrage umzuleiten. Es wird eine Anfrage bekommen. Auch kann ich nicht Daten in der Sitzung speichern, um die Daten zu reproduzieren, da Laravel die aktuelle Sitzung nach dem Login tötet. –

0

Ich verwende Laravel 5.4

LoginController:

public function __construct() 
    { 
     session(['url.intended' => url()->previous()]); 
     $this->redirectTo = session()->get('url.intended'); 

     $this->middleware('guest')->except('logout'); 
    } 
0

In 5.2 Nur in „app ändern/Http/Controller/Auth/AuthController.php " in der Nähe der Linie Nr. 31 protected $ redirectTo = '/ Your_View_page';