Более поздние версии Laravel (правильно) используют POST для выхода из сеанса. Причиной этого является то, что GET / HEAD следует использовать только для того, чтобы пассивные действия соответствовали требованиям HTTP.
POST с токеном csrf также защищает злонамеренных пользователей / сайтов от регистрации ваших сеансов: https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection
Однако, если сеанс уже отключен, и пользователь нажимает кнопку выхода из системы (которая запускает POST на маршрут выхода), принимается ошибка несоответствия токенов. Это имеет смысл – токен не соответствует, потому что сеанс истек.
Я могу просто поймать это конкретное TokenMismatchException на основе переменных запроса, и если да, продолжайте их по-своему (до выведенного пути перенаправления, например «home» или «/»). Как это:
public function render($request, Exception $e) { if ($e instanceof TokenMismatchException && $request->getRequestUri() === '/logout') { return redirect('/'); } return parent::render($request, $e); }
Мой вопрос : если я делаю выше, какова точка маркера в первую очередь? И как вы выходите из системы, когда срок их сессии истек, сохраняя при этом ожидаемые результаты использования выхода POST с токеном CSRF?
Среднее ПО, которое проверяет подлинность, должно выполняться перед промежуточным программным обеспечением, которое проверяет достоверность токена CSRF.
Таким образом, когда сеанс истек, вы никогда не попадаете на проверку CSRF, потому что вы уже проверили истечение срока действия сеанса в промежуточном программном обеспечении для проверки подлинности и сделали перенаправление на страницу входа в систему.
Это не повлияет на CSRF-защиту действительных сеансов, поскольку действительный сеанс будет проходить через посредство промежуточного программного обеспечения.
По умолчанию промежуточное программное обеспечение Laravel запускает проверку CSRF. Однако, это должно быть легко переупорядочить их, чтобы работать по-другому.