web-dev-qa-db-fra.com

Laravel 5.2: Auth :: logout () ne fonctionne pas

Je construis une application très simple dans Laravel 5.2, mais lorsque vous utilisez l'action de AuthController pour vous déconnecter, cela ne fonctionne tout simplement pas. J'ai une barre de navigation qui vérifie Auth::check() et elle ne change pas après l'appel de l'action de déconnexion.

J'ai cette route à l'intérieur du fichier routes.php:

Route::get('users/logout', 'Auth\AuthController@getLogout');

et c'est en dehors du

Déclaration Route::group(['middleware' => ['web']], function ().

J'ai également essayé d'ajouter l'action suivante à la fin du fichier AuthController.php.

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

Avez-vous des idées?

EDIT 1

Si j'efface le cache de Google Chrome, cela fonctionne.

13
Felipe Peña

J'ai également eu un problème similaire dans Laravel 5.2. Vous devriez changer votre itinéraire pour

Route::get('auth/logout', 'Auth\AuthController@logout');

ou dans le constructeur AuthController ajouter

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

Cela a fonctionné pour moi.

37
Aztecnologic

utiliser ci-dessous le code

Auth::logout();

ou

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

Le problème vient du middleware 'guest' du constructeur AuthController. Il devrait être changé de $this->middleware('guest', ['except' => 'logout']); à $this->middleware('guest', ['except' => 'getLogout']); 

Si vous vérifiez le fichier du noyau, vous pouvez voir que votre middleware invité pointe sur \App\Http\Middleware\RedirectIfAuthenticated::class

Ce middleware vérifie si l'utilisateur est authentifié et redirige l'utilisateur vers la page racine s'il est authentifié, mais permet à l'utilisateur d'effectuer une action s'il n'est pas authentifié. En utilisant $this->middleware('guest', ['except' => 'getLogout']);, le middleware ne sera pas appliqué à l'appel de la fonction getLogout, ce qui permettra aux utilisateurs authentifiés de l'utiliser.

N/B: Comme dans la réponse d'origine, vous pouvez changer getLogout en logout puisque la méthode getLogout renvoie simplement la méthode de déconnexion dans l'implémentation de laravel.

4
nonybrighto

Dans Http->Middleware->Authenticate.php, changez login dans l'instruction else en /

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

et définir la route suivante dans routes.php

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

pour la déconnexion appelez la fonction suivante:

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

Important:redirect sur /home au lieu de / qui appelle d'abord $this->middleware('auth'); puis redirige dans un middleware vers /

2
Hekmat

Cela devrait être le contenu de votre constructeur dans AuthController

$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

Ajoutez simplement la route ci-dessous et ne l'ajoutez pas dans un groupe de routes (middleware):

Route::get('your-route', 'Auth\AuthController@logout');

Maintenant, la déconnexion devrait fonctionner comme il se doit dans L 5.2 sans rien modifier dans AuthController.

0
im_tsm

ajoutez cette ligne dans le fichier routes.php Route :: get ('auth/logout', 'Auth\AuthController @ getLogout'); et ajoutez ceci à votre vue a href = "{{url ('/ auth/logout')}}"> Logout cela fonctionne bien pour moi

0
Nassima Noufail