Почему я получаю ошибку в Laravel, когда время сеанса истекло, и я пытаюсь выйти из системы после этого времени - PullRequest
0 голосов
/ 14 апреля 2020

Я бегу Laravel 6 на Усадьбе. Я видел подобные ошибки здесь, но ни одна не указывает c на мою ситуацию.

  • Если я войду, это нормально.
  • Если я сразу выйду из системы, это тоже нормально.
  • Если я оставлю экран на тайм-аут после значения session_lifetime, установленного в .env, он не выйдет из системы без этой ошибки.
Argument 1 passed to Illuminate\Session\Middleware\StartSession::addCookieToResponse() 
must be an instance of Symfony\Component\HttpFoundation\Response, string given, 
called in /home/vagrant/code/MySite/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php on line 60

Я учу Laravel и прихожу из ванили php, я понятия не имею, с чего начать. Заранее спасибо.

У меня нет доступа к маршрутам входа, я использую Auth: route () в сети. php. Я думаю, что я, возможно, решил проблему, переопределив выход из системы (). Кажется, немного упрощенно c. Интересно, это безопасно?

    public function logout(Request $request){
    Auth::logout();
    return  redirect()->route('home');
    }

Редактировать, извините, это не решает мою проблему. Это работает во время активного сеанса, но вне этого у меня та же проблема

К сожалению, это не работает для меня. Я вижу логи c, почему это должно, но та же самая ошибка показывает. В качестве эксперимента я просто возвратил «hello world» сам по себе в методе выхода из системы и, конечно же, он просто отображается на странице выхода из системы без ошибок. Но если я делаю это, я получаю ту же ошибку, что и выше (никаких функций выхода из системы, только представление rtn)

    public function logout(Request $request){
      //if (Auth::check()) {
      //  Auth::logout();
      //}
      //return  redirect()->route('home');
      //$request->session()->flush();
      return view('front.pages.aboutus');
      //return  "hello world";
    }

Как вы можете видеть, я тоже экспериментировал с гриппом sh (), но без радости.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Хорошо, в конце концов обнаружил проблему. У меня была строка, возвращенная в методе приложения / обработчика исключений, когда я пытался отладить проблему 419, и забыл вернуть ее обратно

    public function render($request, Exception $exception)
    {
      if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
          return redirect()->route('login'); // <- the solution
          //return "hello world";// <- the problem
      }
        return parent::render($request, $exception);
    }

Я думаю, что это хорошее решение, чтобы пользователь go был где-то полезно после выхода из системы независимо от того, истек ли тайм-аут сеанса или нет. А 419? довольно бесполезно. По крайней мере, вышеприведенное решение отправляет их куда-то. Вероятно, это может быть другой выбор маршрута, чем у меня здесь, и я мог бы себе представить. Спасибо Mastacheata за вашу помощь в пути.

0 голосов
/ 14 апреля 2020

Laravel использует сеансовые куки. Если вы дадите этому повару ie срок действия, браузер удалит этот повар ie, как только истечет срок его службы. Поэтому в вашем проекте Laravel вы больше не можете выйти из системы, удалив повара ie вручную, поскольку повара ie уже нет.

РЕДАКТИРОВАТЬ, чтобы мой ответ соответствовал изменились детали в вопросе:
Два возможных решения: Если вы можете изменить маршруты, сделайте ваш маршрут выхода доступным только для вошедших в систему пользователей. Если они уже вышли из системы, просто перенаправьте на домашнюю страницу. (См. Промежуточное программное обеспечение маршрутов в Laravel Документах аутентификации )

В качестве более прямого подхода, если вы не можете / не хотите манипулировать своими маршрутами, вы можете просто выполнить Auth::check() в вашей функции выхода из системы. Если Auth::check() возвращает true, пользователь вошел в систему, и вам нужно сначала выйти из него:

    public function logout(Request $request){
      if (Auth::check()) {
        Auth::logout();
      }
      return  redirect()->route('home');
    }

(см. Laravel Документы для Получение аутентифицированного пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...