2015-12-27 7 views
12

Sto costruendo un'applicazione molto semplice in Laravel 5.2, ma quando si utilizza l'azione di AuthController per disconnettersi, semplicemente non funziona. Ho una barra di navigazione che controlla Auth::check() e non cambia dopo aver chiamato l'azione di disconnessione.Laravel 5.2: Auth :: logout() non funziona

ho questo percorso all'interno del file routes.php:

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

ed è al di fuori della dichiarazione

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

Ho anche provato ad aggiungere la seguente azione alla fine del file AuthController.php.

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

Avete qualche idea?

EDIT 1

Se posso ripulire la cache di Google Chrome, funziona.

+0

Che cosa significa "non funziona"? Potresti spiegare in dettaglio quale azione corri e cosa non funziona esattamente? –

+0

Ciao @ MarcinNabiałek. Ho modificato la domanda. Spero sia spiegato meglio. –

+0

Il percorso di logout non deve essere al di fuori del gruppo middleware 'web'. Dovrebbe esserci dentro. –

risposta

6

uso sottostante Codice

Auth::logout(); 

o

auth()->logout(); 
36

Ho anche avuto problemi simili in laravel 5.2. Si dovrebbe cambiare il percorso per

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

o nel costruttore AuthController aggiungere

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

che ha lavorato per me.

+0

Grazie. Lo controllerò più tardi e, se funziona, lo accetterò come risposta. –

+0

@Aztecnologic Questo problema * mio * è stato risolto. Non so perché dobbiamo scrivere un metodo di logout personalizzato in Laravel 5.2, ma non ho dovuto farlo in 5.1. Oh bene. – tenub

+0

Grazie. Risolto il mio problema, anche. Qualche spiegazione perch? Sembra essere collegato all'aggiornamento da 5.1 a 5.2 durante l'utilizzo del vecchio repository boilerplate di laravel/laravel. – lorey

1

Questo dovrebbe essere il contenuto del costruttore in AuthController

$this->middleware('web'); 
$this->middleware('guest', ['except' => 'logout']); 
2

In Http->Middleware->Authenticate.php cambiamento login in else per /

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

e definire seguente itinerario in routes.php

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

per chiamata di uscita seguente funzione:

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

Importante: reindirizzare /home invece di / che prima chiama $this->middleware('auth'); e poi nel middleware reindirizzare /

4

Il problema è dal middleware 'ospite' nel costruttore AuthController .Dovrebbe essere cambiato $this->middleware('guest', ['except' => 'logout']);-$this->middleware('guest', ['except' => 'getLogout']);

Se si seleziona il file del kernel, si può vedere che il vostro middleware ospite punto di \App\Http\Middleware\RedirectIfAuthenticated::class

Questo middleware controlla se l'utente è autenticato e reindirizza l'utente alla pagina principale, se autenticato ma consente all'utente di eseguire un'azione se non autenticato. Usando $this->middleware('guest', ['except' => 'getLogout']);, il middleware non verrà applicato quando viene chiamata la funzione getLogout, rendendo così possibile l'uso da parte degli utenti autenticati.

N/B: Come nella risposta originale, è possibile modificare getLogout in logout poiché il metodo getLogout restituisce semplicemente il metodo di disconnessione nell'implementazione di laravel.

0

aggiungere questa riga nel file routes.php Route :: get ('auth/logout', 'Auth \ AuthController @ getLogout'); e aggiungere questo nella vista a href = "{{url ('/ auth/logout')}}"> Disconnetti tutto funziona bene per me

0

Basta aggiungere sotto percorso e non aggiungere questo all'interno di qualsiasi percorso gruppo (middleware):

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

Ora Logout dovrebbe funzionare come dovrebbe a L 5.2 senza modificare nulla in AuthController.

0
/** 
* 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(); 
}