it-swarm-pt.tech

Laravel 5.2: Auth :: logout () não está funcionando

Estou construindo um aplicativo muito simples no Laravel 5.2, mas ao usar a ação AuthController para sair, simplesmente não funciona. Eu tenho uma barra de navegação que verifica Auth::check() e não muda depois de chamar a ação de logout.

Eu tenho essa rota dentro do arquivo routes.php: 

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

e está fora do

declaração Route::group(['middleware' => ['web']], function ().

Eu também tentei adicionar a ação follow no final do arquivo AuthController.php.

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

Você tem alguma ideia?

EDITAR 1

Se eu limpar o cache do Google Chrome, ele funciona.

13
Felipe Peña

Eu também tive problema semelhante no Laravel 5.2. Você deve mudar sua rota para

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

ou no construtor AuthController adicionar

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

Isso funcionou para mim.

37
Aztecnologic

use abaixo do código

Auth::logout();

ou

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

O problema é do middleware 'guest' no construtor AuthController. Deve ser alterado de $this->middleware('guest', ['except' => 'logout']); para $this->middleware('guest', ['except' => 'getLogout']); 

Se você verificar o arquivo do kernel, você pode ver que seu middleware convidado aponta para \App\Http\Middleware\RedirectIfAuthenticated::class

Esse middleware verifica se o usuário está autenticado e redireciona o usuário para a página raiz se autenticado, mas permite que o usuário execute uma ação se não estiver autenticado. Usando $this->middleware('guest', ['except' => 'getLogout']);, o middleware não será aplicado quando a função getLogout for chamada, possibilitando assim que usuários autenticados façam uso dela.

N/B: Como na resposta original, você pode alterar getLogout para logout, já que o método getLogout simplesmente retorna o método de logout na implementação do laravel.

4
nonybrighto

Em Http->Middleware->Authenticate.php altere login na instrução else para /

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

e definir a seguinte rota em routes.php

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

para a função de acompanhamento de chamada de logout:

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

Importante:redireciona para /home ao invés de / que primeiro chama $this->middleware('auth'); e depois para o middleware redireciona para /

2
Hekmat

Este deve ser o conteúdo do seu construtor no 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

Simplesmente adicione abaixo da rota e não adicione isso dentro de nenhum grupo de rotas (middleware):

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

Agora o logout deve funcionar como deveria em L 5.2 sem modificar nada em AuthController.

0
im_tsm

adicione esta linha no arquivo routes.php Route :: get ('auth/logout', 'Auth\AuthController @ getLogout'); e adicione isso na sua opinião a href = "{{url ('/ auth/logout')}}"> Sair funciona bem para mim

0
Nassima Noufail