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.
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.
utiliser ci-dessous le code
Auth::logout();
ou
auth()->logout();
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.
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 /
Cela devrait être le contenu de votre constructeur dans AuthController
$this->middleware('web');
$this->middleware('guest', ['except' => 'logout']);
/**
* 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();
}
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
.
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