webentwicklung-frage-antwort-db.com.de

Wie lege ich den Laravel 5.3 Logout-Weiterleitungspfad fest?

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.

33
Tim van Uum

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.

41
Avram

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.

10

Laravel> 5,7

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');
}
10
Chris

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.

6
Sachith

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:-

https://laravel.com/docs/5.3/upgrade

3
Mohamed Gabr

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');
}
2
ArtemSky

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

2

Verwenden Sie dies einfach in routes/web.php

Route::get('logout', function (){
Auth::logout();
return redirect('your URL');
});
1
Xander

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 : '/');
}
1
cyclops1101

Um das Wiederholen des Abmeldecodes zu vermeiden und DRY zu folgen, können Sie dies tun 

  • Fügen Sie in Auth/LoginController eine benutzerdefinierte Abmelde-Route hinzu, rufen Sie Auth::logout() an und kehren Sie zu Ihrem Pfad zurück, oder 
  • Fügen Sie eine after - Middleware hinzu (say redirectAfterLogout ) und fügen Sie sie der Abmelderoute hinzu
0
Aranya Sen

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');;
}
0
Zaheer Sadique

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');
}
0
Omid Ahmadyani

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

0
S. Domeng