Gibt es keine elegante Lösung, um nach dem Abmelden in Laravel 5.3 auf eine bestimmte Seite umzuleiten?
Die aufgerufene Funktion stammt aus dem Merkmal AuthenticatesUsers :
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
Dies ist eine Standardfunktion aus dem Kern von Laravel. Ich muss also die ganze Funktion überschreiben. Ich kann den Kern nicht bearbeiten ... Aber es gibt keine einfachere Lösung, da es sich als übertrieben anfühlen würde, wenn Sie sich manuell abmelden, leeren und regenerieren.
So habe ich es gemacht. In Auth\LoginController haben Sie:
use AuthenticatesUsers;
Ändern Sie es in:
use AuthenticatesUsers {
logout as performLogout;
}
Definieren Sie dann eine neue logout()
-Methode in Ihrem LoginController:
public function logout(Request $request)
{
$this->performLogout($request);
return redirect()->route('your_route');
}
Sicher, reguläre logout()
-Methode in dieser Eigenschaft hat nur drei Zeilen (zum Abmelden von Benutzern vom System), sodass Sie sie in Ihre Methode kopieren können. Sie sollten jedoch immer dem DRY -Prinzip folgen (wiederholen Sie sich nicht). und verwenden Sie so viel Code wie möglich.
Ich würde LoginController
erben und die logout
-Funktion überschreiben, die von dem dortigen Merkmal kommt:
LoginController.php -> lass das so wie es ist.
MyLoginController.php :
class MyLoginController extends LoginController {
protected $redirectAfterLogout = '/goodbye';
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect($this->redirectAfterLogout);
}
}
Natürlich sollten Sie daran denken, Ihre Auth-Routen entsprechend zu aktualisieren.
Die akzeptierte Antwort ist in Ordnung, aber Sie können das Berühren der Logout-Logik vollständig umgehen, indem Sie einfach die loggedOut
-Methode überschreiben:
// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
Ich benutze Laravel-5.2 , was ich verwendet habe war:
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
Stellen Sie sicher, dass Sie importiert haben:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
In Ihrem Controller.
Die Auth :: routes-Methode in laravel 5.3 registriert eine POST -Route für/logout anstelle einer GET-Route. Dadurch wird verhindert, dass andere Webanwendungen Ihre Benutzer von Ihrer Anwendung abmelden. Um ein Upgrade durchzuführen, sollten Sie entweder Ihre Abmeldeanforderungen zur Verwendung des Verbs POST konvertieren oder einfach Ihre eigene GET-Route für den/logout-URI registrieren, indem Sie diese Route der Datei Routes/web.php hinzufügen: -
Route::get('/logout', 'Auth\[email protected]');
und es sollte gut funktionieren und umleiten in das '/' Verzeichnis, wie es in der LoginController.php definiert ist
Zitiert aus:-
Am einfachsten ist es, die Logout-Eigenschaft bei LoginController
in App\Http\Controllers\Auth\LoginController
wie folgt zu überschreiben
public function logout(Request $request){
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect()->route('you_route_name');
}
Bei jeder Abmeldeaktion wird ein Ereignis Events\Logout
ausgelöst. Sie können einen Listener erstellen, der dieses Ereignis abhört, und dort Logik hinzufügen. Weitere Informationen zu Hörern finden Sie hier https://laravel.com/docs/5.3/events
Verwenden Sie dies einfach in routes/web.php
Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
Wenn Sie den AuthController verwenden, fügen Sie diese Variable oben hinzu und ändern Sie die Zeichenfolge, um sie umzuleiten, wo immer Sie möchten.
protected $redirectAfterLogout = '/';
Die AuthenticatesUsers-Klasse verfügt über eine Logout-Funktion, die diese Variable prüft.
public function logout()
{
Auth::guard($this->getGuard())->logout();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
Um das Wiederholen des Abmeldecodes zu vermeiden und DRY zu folgen, können Sie dies tun
Auth::logout()
an und kehren Sie zu Ihrem Pfad zurück, oder In Laravel 5.8 finden Sie den folgenden Pfad:
App\Http\Controllers\Auth\LoginController.php
use Illuminate\Http\Request;*
schreibe diese Funktion
public function logout(Request $request){
$this->guard()->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/Where/You/want/to/redirect');;
}
Die akzeptierte Antwort ist in Ordnung, aber Sie können das Berühren der Logout-Logik vollständig umgehen, indem Sie einfach die loged-Methode logout überschreiben:
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
Angenommen, jemand sieht es sich schon seit Tagen an und die Version der verwendeten Laravel ist 5.7
Fügen Sie diese Zeile in LoginController.js hinzu
public function logout()
{
Auth::logout();
return redirect()->to('/your-route');
}
Dies setzt voraus, dass Sie das von laravel zur Verfügung gestellte Authentifizierungsmodul verwenden