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?

16
demandé sur mikelovelyuk 2015-02-26 19:23:18

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)

49
répondu lorey 2017-05-23 11:55:10

Essayez ceci..

mettez le code suivant "class action authcontroller extends Controller"

public function getLogout()
    {
        $this->auth->logout();
        Session::flush();
        return redirect('/');
    }
11
répondu Deenadhayalan Manoharan 2015-02-27 05:01:32

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']);
}
7
répondu Daniel Doinov 2016-04-08 21:06:50

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.

2
répondu Amarja 2016-03-04 12:00:53

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

2
répondu Valdir Lourenco 2016-04-26 14:43:26

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);
    }
}
2
répondu Leo Lima 2016-06-05 17:23:51

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?

1
répondu Patrick Assoa Adou 2017-05-23 12:26:27

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.

0
répondu Marcus 2015-02-26 16:28:21

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"/"

0
répondu Hekmat 2016-04-09 07:39:50

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.

0
répondu vivanov 2016-10-25 14:01:56

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>
0
répondu user857276 2017-08-15 16:30:35

Pour quitter dans laravel 5.6 :

    <a href="{{ url('logout') }}">Logout</a>

utilisez ceci dans votre web.php

Route::get('logout', 'Auth\LoginController@logout');
0
répondu Kabir Hossain 2018-08-14 08:32:21

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();
-1
répondu szatti1489 2017-05-29 19:48:02