wake-up-neo.com

Laravel 5.2: Auth :: logout () funktioniert nicht

Ich erstelle eine sehr einfache App in Laravel 5.2, aber wenn Sie die Aktion von AuthController zum Abmelden verwenden, funktioniert dies einfach nicht. Ich habe eine Navigationsleiste, die nach Auth::check() sucht und sich nach dem Aufrufen der Abmeldeaktion nicht ändert.

Ich habe diese Route in der Datei routes.php:

Route::get('users/logout', 'Auth\[email protected]');

und es ist außerhalb der

Route::group(['middleware' => ['web']], function () Anweisung.

Ich habe auch versucht, die folgende Aktion am Ende der Datei AuthController.php hinzuzufügen.

public function getLogout() 
{
    $this->auth->logout();
    Session::flush();
    return redirect('/');
}

Hast du eine Idee?

EDIT 1

Wenn ich den Chrome-Cache von Google lösche, funktioniert es.

13
Felipe Peña

Ich hatte auch ein ähnliches Problem in Laravel 5.2. Sie sollten Ihre Route in ändern

Route::get('auth/logout', 'Auth\[email protected]');

oder im AuthController-Konstruktor hinzufügen

public function __construct()
{
    $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}

Das hat bei mir funktioniert.

37
Aztecnologic

verwenden Sie den folgenden Code

Auth::logout();

oder

auth()->logout();
6
Nimisha Molia

Das Problem liegt in der 'guest'-Middleware im AuthController-Konstruktor. Es sollte von $this->middleware('guest', ['except' => 'logout']); in $this->middleware('guest', ['except' => 'getLogout']); geändert werden. 

Wenn Sie die Kernel-Datei überprüfen, können Sie feststellen, dass Ihre Gast-Middleware auf \App\Http\Middleware\RedirectIfAuthenticated::class verweist.

Diese Middleware prüft, ob der Benutzer authentifiziert ist, und leitet den Benutzer bei Authentifizierung zur Stammseite weiter. Der Benutzer kann jedoch eine Aktion ausführen, wenn er nicht authentifiziert ist. Durch die Verwendung von $this->middleware('guest', ['except' => 'getLogout']); wird die Middleware nicht angewendet, wenn die getLogout-Funktion aufgerufen wird. Dadurch können authentifizierte Benutzer davon Gebrauch machen.

N/B: Wie in der ursprünglichen Antwort können Sie getLogout in logout ändern, da die getLogout-Methode in der Implementierung von laravel einfach die Logout-Methode zurückgibt.

4
nonybrighto

Ändern Sie in Http->Middleware->Authenticate.phplogin in else-Anweisung in /.

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

und definieren Sie die folgende Route in routen.php

Route::get('/', function () {
    return view('login');
});

zum Abmelden rufen Sie folgende Funktion auf:

public function getlogout(){
    \Auth::logout();
    return redirect('/home');
}

Wichtig:umleiten zu /home statt /, der zuerst $this->middleware('auth'); aufruft, und dann in der Middleware auf / umleiten

2
Hekmat

Dies sollte der Inhalt Ihres Konstruktors in AuthController sein

$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
1
Napoleon256611
/**
 * Log the user out of the application.
 *
 * @param \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function logout(Request $request)
{
    $this->guard()->logout();

    $request->session()->flush();

    $request->session()->regenerate();

    return redirect('/');
}

/**
 * Get the guard to be used during authentication.
 *
 * @return \Illuminate\Contracts\Auth\StatefulGuard
 */
protected function guard()
{
    return Auth::guard();
}
0
Mehran

Fügen Sie einfach die folgende Route hinzu und fügen Sie diese nicht in einer Routengruppe (Middleware) ein:

Route::get('your-route', 'Auth\[email protected]');

Jetzt sollte das Logout in L 5.2 so funktionieren, wie es sollte, ohne etwas an AuthController zu ändern.

0
im_tsm

fügen Sie diese Zeile in der Datei routes.php ein. Route :: get ('auth/logout', 'Auth\AuthController @ getLogout'); und fügen Sie dies in Ihre Ansicht ein a href = "{{url ('/ auth/logout')}}"> Logout es funktioniert gut für mich

0
Nassima Noufail