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);