Laravel 5.2: Auth :: logout () не работает

Я создаю очень простое приложение в Laravel 5.2, но при использовании AuthControllerдействие, чтобы выйти, просто не работает. У меня есть панель навигации, которая проверяет Auth::check() и он не меняется после вызова действия выхода из системы.

У меня есть этот маршрут в файле rout.php:

Route::get('users/logout', 'Auth\AuthController@getLogout');

и это за пределами

Route::group(['middleware' => ['web']], function () заявление.

Я также попытался добавить следующее действие в конец файла AuthController.php.

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

Есть ли у вас какие-либо идеи?

РЕДАКТИРОВАТЬ 1

Если я очищаю кеш Google Chrome, он работает.

13

Решение

У меня также была похожая проблема в Laravel 5.2. Вы должны изменить свой маршрут на

Route::get('auth/logout', 'Auth\AuthController@logout');

или в конструктор AuthController добавить

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

Это сработало для меня.

37

Другие решения

используйте код ниже

Auth::logout();

или же

auth()->logout();
6

Проблема заключается в «гостевом» промежуточном программном обеспечении в конструкторе AuthController. Это должно быть изменено с $this->middleware('guest', ['except' => 'logout']); в $this->middleware('guest', ['except' => 'getLogout']);

Если вы проверите файл ядра, то увидите, что ваше гостевое промежуточное ПО указывает на \App\Http\Middleware\RedirectIfAuthenticated::class

Это промежуточное программное обеспечение проверяет, прошел ли пользователь проверку подлинности, и перенаправляет пользователя на корневую страницу, если она прошла проверку подлинности, но позволяет пользователю выполнить действие, если оно не подтверждено. Используя $this->middleware('guest', ['except' => 'getLogout']); промежуточное программное обеспечение не будет применено при вызове функции getLogout, что позволит аутентифицированным пользователям использовать ее.

N / B: Как и в оригинальном ответе, вы можете изменить getLogout в logout поскольку метод getLogout просто возвращает метод выхода из системы в реализации laravel.

4

В Http->Middleware->Authenticate.php менять login в другом заявлении /

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

и определите следующий маршрут в route.php

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

для выхода из системы вызовите следующую функцию:

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

Важный: перенаправить на /home вместо / что первые звонки $this->middleware('auth'); а затем в промежуточном программном обеспечении перенаправить на /

2

Это должно быть содержимое вашего конструктора в AuthController

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

добавьте эту строку в файл rout.php Route :: get (‘auth / logout’, ‘Auth \ AuthController @ getLogout’);
и добавить это на ваш взгляд
a href = «{{url (‘/ auth / logout’)}}»> Выход
Он отлично работает для меня

0

Просто добавьте маршрут ниже и не добавляйте его в какую-либо группу маршрутов (промежуточное ПО):

Route::get('your-route', 'Auth\AuthController@logout');

Теперь выход из системы должен работать как в L 5.2 без каких-либо изменений в 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();
}
0
По вопросам рекламы [email protected]