Laravel 5 Auth Logout не уничтожает сеанс
Я использую систему Laravel5 Auth для моего нового проекта, я могу использовать функции регистрации и входа без каких-либо проблем, но выход из системы не работает должным образом, однако я перенаправляюсь на url, указанный в $redirectAfterLogout
, но он не уничтожить сеанс, так что даже после нажатия кнопки выхода из системы я могу увидеть панель инструментов.
У laravel есть ошибка в системе Auth, пожалуйста, сообщите, спасибо
Ответы
Ответ 1
Вы не указали какой-либо фрагмент кода, который вы использовали. Однако работает следующий код:
public function getLogout(){
Auth::logout();
Session::flush();
return Redirect::to('/');
}
Session::flush();
очищает все существующие сеансы.
Ответ 2
Используя Laravel 5.2, я зарегистрировал прослушиватель, обработал событие выхода из системы и назвал Session:: flush, как было предложено выше. Казалось, что он работает очень хорошо. Надеюсь, что это будет полезно.
EventServiceProvider.php
protected $listen = [
'App\Events\SomeEvent' => [
'App\Listeners\EventListener',
],
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\ClearSessionAfterUserLogout'
],
];
ClearSessionAfterUserLogout.php
public function handle(Logout $event)
{
Session::flush();
}
Ответ 3
Кажется, что в /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php... функция getLogout() никогда не достигается, поэтому метод logout() никогда не срабатывает.
В моем случае в моем /app/Http/routes.php... вместо этого "Route:: get (" auth/logout "," Auth\AuthController @getLogout "); Я изменил его на:" Маршрут:: get (" auth/logout "," Auth\AuthController @logout ");"
Ответ 4
У меня была такая же проблема, и я все испробовал, но в конце концов смог ее исправить.
Моя проблема заключалась в том, что когда я нажимал кнопку выхода из системы, до этого у меня было несколько HTTP-запросов, на которые еще не было ответа, поэтому даже когда пользователь вышел из системы, позже с ответом на ожидающие запросы он был зарегистрирован в еще раз. Вот пример:
Another Request | ***********************************
Logout Request | ********************
|
Time | --|------|-------------------|------|------>
t1 t2 t3 t4
Итак, удаление этих неответных запросов сработало для меня. Надеюсь, что этот ответ поможет:)
Ответ 5
Я переключился на драйвер сеанса базы данных и использовал следующий код в своем действии выхода из системы
$request->session()->getHandler()->destroy($request->session()->getId());
Ответ 6
Вы можете просто переопределить метод выхода в AuthController.php
Вот пример кода:
public function logout(){
Session::flush();
Auth::guard($this->getGuard())->logout();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
Ответ 7
В вашем случае вы, вероятно, не достигли метода logout(). Если вы используете механизм аутентификации Laravel 5, вы запустите метод getLogout() для аутентификации AuthenticatesAndRegistersUsers, который делает $this->auth->logout();
Найдите этот код, отредактируйте метод, подобный приведенному ниже, для отладки. Если вы видите строку "Выход из системы", вы должны выйти из системы. Что-то не так с вашей маршрутизацией, и выход из системы просто не выполняется.
/**
* Log the user out of the application.
*
* @return \Illuminate\Http\Response
*/
public function getLogout()
{
dd("Logging out");
$this->auth->logout();
return redirect('/');
}
Ответ 8
Я сражался с этим, и я пришел к решению.
Вкратце: сеанс Laravel читает и записывает с помощью промежуточного программного обеспечения. Он считывает сохраненный сеанс в начале запроса и записывает любые изменения в конце запроса. Если вы сделаете переадресацию, то текущий запрос никогда не завершится, а запись промежуточного программного обеспечения не произойдет.
Итак, как это исправить? В зависимости от вашей реализации... вы должны return
перенаправить команду, а не вызывать ее напрямую.
return redirect($redirectAfterLogout)
Ответ 9
Я столкнулся с подобной проблемой, и оказалось, что с помощью драйвера "файла" для сеансов каким-то образом сервер создавал файлы, которые он не мог изменить позже, но не было предупреждений о разрешении файлов. Я переключился на реализацию redis, поэтому, к сожалению, я не могу сказать, как исправить проблему создания файла, но подумал, что это может сэкономить некоторое время.
Ответ 10
Принимая объект запроса в действии контроллера (не забудьте добавить это после объявления пространства имен контроллера: использовать Auth;):
/**
*
* Render page
*
* @route POST /user/{user_id}/logout
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function logout(Request $request) {
Auth::logout();
$request->session()->flush();
}
Ответ 11
trait AuthenticatesUsers
public function logout(Request $request)
измените это значение
$request->session()->regenerate();
к этому
$request->session()->regenerate(true);