La déconnexion de Laravel 5 Auth ne fonctionne pas
Quand j'utilise l'Authentification intégrés et essayez de déconnecter l'utilisateur /auth/logout
- cela ne fonctionne pas comme espéré. Il semble garder la connexion de l'utilisateur. Mais quand je nettoie le cache de mon navigateur, je peux voir que c'est a en fait déconnecté l'utilisateur.
Je ne reçois aucune erreur sur la page ni dans le fichier journal.
je suppose que Session::flush()
à la méthode de déconnexion pourrait résoudre cela - mais je ne sais pas où le mettre.. Quelqu'un peut-il me diriger dans la bonne la direction?
13 réponses
pour toute personne qui a des problèmes à le résoudre avec la solution acceptée: J'ai commencé avec Laravel 5.1 et mis à jour à 5.2. Le correctif suivant a fonctionné pour moi:
essayez de changer votre parcours de' déconnexion ' en
Route::get('auth/logout', 'Auth\AuthController@logout');
ou dans AuthController constructor ajouter
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
Extrait de:https://stackoverflow.com/a/34667356/1275778 (cochez également les autres réponses si vous avez encore des problèmes par la suite)
Essayez ceci..
mettez le code suivant "class action authcontroller extends Controller"
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
j'ai eu le même problème. Le problème était en fait une simple petite erreur dans la configuration de la route et du contrôleur.
vous voyez que la route spécifie en fait une méthode de getLogout
et l'exception controller recherche logout
.
La seule chose que vous devez faire est de changer l'exception dans le contrôleur. Pas besoin d'autres méthodes. getLogout
méthode existe déjà et fonctionne parfaitement.
Ici, c'est le réel code
app / Http / routes.php
Route::get('auth/logout', 'Auth\AuthController@getLogout');
app/Http/Controllers/Auth / AuthController.php
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
_construct
méthode doit ressembler à cela:
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'getLogout']);
}
j'ai eu le même problème avec la mise à jour de laravel 5.2. J'ai utilisé le contrôleur auth de laravel et j'ai résolu ce problème en utilisant comme,
/logout
au lieu de /auth/logout
même /register
et /login
au lieu d'utiliser /auth/register
et /auth/login
.
Laravel 5.2 l'url est un peu différent ...
Utilisez ceci
php artisan make:auth
cela générera les routes pour auth et quelques gabarits pour l'enregistrement e de connexion...
attention à l'utiliser avec les projets existants, il peut apporter des modifications à votre code
ce ocurrs parce que l'middleware est appelé pour chaque route. vous pouvez ajouter une exception à "logout route" dans App\Http\Middleware\RedirectIfAuthenticated.php
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (!$request->is('/logout') && Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}
pas assez sur les navigateurs qui récupèrent vos onglets après crash (Chrome ne supprime pas les cookies de session). Aussi, après la redirection une nouvelle session est créée. Solution: dans AuthController, comme mentionné ci-dessus, dans getLogout, définissez une variable et passez-la à redirect:
$data['logout'] = true;
return redirect('/')->with('data',$data);
Dans votre maison vue de faire ceci:
@if(session()->has('data') && session('data')['logout'])
{{session_unset()}}
{{setcookie('laravel_session', "", -1, "/")}}
@endif
je crois Laravel rediriger réinitialise Session. Donc, après la redirection, en vue, réinitialiser supprimer cookie. N'importe qui peut commenter? Est-ce la pour quelle raison ça marche?
pour déconnecter un utilisateur avec Laravel en utilisant les outils d'authentification intégrés, c'est aussi simple que Auth::logout();
.
Veuillez également vérifier les différents paramètres de la session config/session.php
si les sessions se comportent de façon imprévisible.
la Solution est très simple
dans Http - > Middleware - > authentifier.php changement "se connecter" dans le reste de déclaration "/"
return redirect()->invité('/');
et définir la route à suivre dans les routes.php
Route::get('/', function () {
return view('login');
});
pour la fonction de suivi des appels de déconnexion: getlogout de la fonction publique(){ \Auth:: logout(); retour redirection ('/home')); } c'est important redirection vers "/home" au lieu de "/" premiers appels $this->middleware('auth'); et puis dans middleware rediriger vers"/"
j'ai eu le même problème après la mise à niveau vers Laravel 5.3. Pour le fixer, j'ai remarqué que les caractères utilisés dans
App\Http\Controllers\Auth\AuthController
sont périmés, donc j'ai changé la ligne
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
en
use AuthenticatesUsers
;
et aussi la ligne dans le constructeur
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
en
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
la méthode App\Http\Controllers\Auth\AuthController@logout
a commencé à fonctionner correctement.
5.4 cela a fonctionné pour moi...
<a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>
<form id="logout-form" action="/logout" method="POST" style="display: none;">{{ csrf_field() }}</form>
Pour quitter dans laravel 5.6 :
<a href="{{ url('logout') }}">Logout</a>
utilisez ceci dans votre web.php
Route::get('logout', 'Auth\LoginController@logout');
C'est un assez vieux thread mais j'ai finalement trouvé un truc simple pour déconnecter l'utilisateur à partir du serveur:
return Auth::logout();