Laravel 5 Auth Logout не разрушает сеанс

Laravel 5 Auth Logout не разрушает сеанс

14.04.2015 10:55:44 Просмотров 43 Источник

Я использую Laravel5 авт системы для моего нового проекта, я могу использовать для регистрации и входа функции с любой проблемой, но выход не работает, как ожидалось, но я получаю перенаправлены на URL, указанный в $redirectAfterLogout но это не разрушает сессии, так что даже после удара кнопка выхода, я могу видеть панель приборов.

Есть ли у laravel какая-то ошибка в системе Auth, пожалуйста, предложите, спасибо

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session#comment47388448_29621965
откуда вы знаете, что сеанс уничтожен или нет? Вы ограничили маршруты с помощью auth?
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session#comment65127550_29621965
У меня была та же проблема, моя ошибка заключалась в том, что я поставил промежуточное программное обеспечение "гость" на маршрут выхода. : / Возможно, у вас та же проблема.

Ответы - Laravel 5 Auth Logout не разрушает сеанс / Laravel 5 Auth Logout not destroying session

Margus Pala

14.04.2015 11:37:21

В вашем случае вы, вероятно, не достигаете метода logout (). Если вы используете Laravel 5 builting auth механизм, то вы будете запускать AuthenticatesAndRegistersUsers trait getLogout () метод, который делает $this->auth->logout();

Найдите этот код, отредактируйте метод, как показано ниже, для отладки. Если вы видите строку "выход из системы", то вы должны выйти из системы. Ohterwise что-то не так с вашей маршрутизацией, и выход из системы просто никогда не выполняется.

/**
 * Log the user out of the application.
 *
 * @return \Illuminate\Http\Response
 */
public function getLogout()
{
    dd("Logging out");
    $this->auth->logout();

    return redirect('/');
}
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622740#comment47392599_29622740
Да, я вижу "выход из системы" на экране после щелчка logout link, это означает, что logout link поражает эту функцию.
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622740#comment47397028_29622740
Другим вариантом может быть то, что вы запомнили свой аккаунт. Пожалуйста, проверьте состояние входа пользователя до и после вызова logout (). Вы можете использовать dd ($this - >auth - > > user ()); для этого. Это покажет вам наверняка, был ли пользователь вошел в систему или нет после выхода из системы
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622740#comment47397453_29622740
просто попробовал этот тест, получив пустой после вызова, так что это означает его уничтожение auth->user()но почему страница входа перенаправляется на панель мониторинга даже после выхода из системы.
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622740#comment47397532_29622740
В какой-то момент в будущем пользователь должен был снова войти в систему. Вам нужно проверить ваш контроллер getLogin () метод и выяснить, где именно
Amita

14.04.2015 11:46:21

Вы не предоставили ни одного фрагмента кода, который вы использовали. Однако следующий код работает:

public function getLogout(){
    Auth::logout();
    Session::flush();
    return Redirect::to('/');
}

Session::flush();очищает все существующие сеансы.

https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622931#comment47392939_29622931
В настоящее время я использую Laravel 5 builting auth механизм
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622931#comment47395408_29622931
Так что я надеюсь, что вы в состоянии уничтожить сеанс сейчас?
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/29622931#comment65127546_29622931
У меня была та же проблема, моя ошибка заключалась в том, что я поставил промежуточное программное обеспечение "гость" на маршрут выхода. : / Возможно, у вас та же проблема.
samlev

08.09.2015 07:01:39

Я боролся с этим и пришел к решению.

Короче говоря: сеанс Laravel читает и записывает с помощью промежуточного программного обеспечения. Он считывает сохраненный сеанс в начале запроса и записывает любые изменения в конце запроса. Если вы делаете редирект, то текущий запрос никогда не завершается, и запись промежуточного программного обеспечения не происходит.

Итак, как это исправить? В зависимости от вашей реализации... вы должны returnкоманду перенаправления, а не вызывать ее напрямую.

return redirect($redirectAfterLogout)
michael

09.02.2016 06:39:26

Я столкнулся с подобной проблемой, и оказалось, что с помощью драйвера "file" для сеансов каким-то образом сервер создавал файлы, которые он не мог изменить позже, но не было никакого предупреждения о разрешении файла. Я переключился на реализацию redis, поэтому, к сожалению, не могу сказать, как исправить проблему создания файла, но подумал, что это может сэкономить кому-то некоторое время.

Frederick G. Sandalo

26.05.2016 11:37:09

Кажется, что в

/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php 

function getLogout()никогда не достигается, поэтому logout()никогда не срабатывает.

В моем случае, в моем

/app/Http/routes.php

Я думаю об этом:

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

Я изменил его на:

Route::get('auth/logout', 'Auth\AuthController@logout');
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/37455654#comment62411403_37455654
Кстати, это решение для Laravel 5.2.29. Может быть, версии имеют небольшие изменения за кулисами
ken-mills

26.05.2016 08:56:32

Используя Laravel 5.2, я зарегистрировал прослушиватель, обработал событие выхода из системы и вызвал Session::flush, как было предложено выше. Похоже, это сработало довольно хорошо. Надеюсь, это будет полезно.

EventServiceProvider.РНР

protected $listen = [
    'App\Events\SomeEvent' => [
        'App\Listeners\EventListener',
    ],
    'Illuminate\Auth\Events\Logout' => [
        'App\Listeners\ClearSessionAfterUserLogout'
    ],
]; 

ClearSessionAfterUserLogout.РНР

public function handle(Logout $event)
{
    Session::flush();
}
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/37467951#comment65127541_37467951
У меня была та же проблема, моя ошибка заключалась в том, что я поставил промежуточное программное обеспечение "гость" на маршрут выхода. : / Возможно, у вас та же проблема.
Bitclaw

23.12.2016 04:58:11

Принимая объект запроса в действии контроллера (не забудьте добавить это после объявления пространства имен контроллера: use 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();
}
dani24

13.02.2017 03:39:38

У меня была та же проблема, и я перепробовал все, но в конце концов я смог ее исправить.

Моя проблема заключалась в том, что когда я нажимал на кнопку выхода, до этого у меня были некоторые http-запросы, на которые еще не было ответа, поэтому даже когда пользователь выходил из системы, позже с ответом на ожидающие запросы он снова входил в систему. Вот такой пример:

Another Request |   ***********************************
Logout Request  |          ********************
                |
Time            | --|------|-------------------|------|------>
                   t1      t2                  t3     t4

Так что удаление этих неотвеченных запросов сработало для меня. Я надеюсь, что этот ответ поможет вам :)

https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/42204272#comment73801960_42204272
Где удалить эти неотвеченные запросы?
https://stackoverflow.com/questions/29621965/laravel-5-auth-logout-not-destroying-session/42204272#comment73807392_42204272
В моем случае я нашел эти запросы в некоторых вызовах jQuery ajax, поэтому я просто удалил этот код, а затем выход начал работать, как и ожидалось. Надеюсь, я смогу помочь с этим :)
Brett

20.06.2017 07:07:26

Я переключился на драйвер сеанса базы данных и использовал следующий код в своем действии выхода из системы

$request->session()->getHandler()->destroy($request->session()->getId());
Gajanan Tagadpalle

15.07.2017 08:58:26

Вы можете просто переопределить метод выхода из системы в AuthController.РНР

Вот пример кода:

public function logout(){
        Session::flush();
        Auth::guard($this->getGuard())->logout();
        return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
    }
andrei040191

20.07.2017 02:49:23

признак AuthenticatesUsers

public function logout(Request $request)

изменить это

$request->session()->regenerate();

до настоящего времени

$request->session()->regenerate(true);
Slavik Okara

23.12.2019 11:18:06

Auth()->logout();

Для самых новых версий.

Закрыть X