Laravel: обнаружение несоответствия токена в контроллере - PullRequest
0 голосов
/ 03 февраля 2020

Я заметил, что на моем сайте, если пользователь слишком долго оставался на странице (обычно это занимает несколько часов), AJAX почтовые запросы возвращают JSON message из CSRF token mismatch.

Можно ли как-то обнаружить это в контроллере, чтобы я мог вернуть правильное сообщение об ошибке (я понимаю, что могу сделать это в логах внешнего интерфейса c, но было бы неплохо знать)?

1 Ответ

1 голос
/ 03 февраля 2020

Для этого можно использовать фильтры маршрутов.

Из документации laravel:

Фильтры маршрутов предоставляют удобный способ ограничения доступа к данному маршруту, что полезно для создания областей вашего сайта, которые требуют аутентификации. В инфраструктуру Laravel включено несколько фильтров, включая фильтр авторизации, фильтр auth.basi c, гостевой фильтр и фильтр csrf. Они находятся в файле app / filters. php.

Примечание. Фильтры отключаются при тестировании среды приложения.

Сначала определите маршрут Отфильтруйте в вашем поставщике услуг:

Route::filter('csrf', function(){
    if (Session::token() != Input::get('_token')) {
        throw new Illuminate\Session\TokenMismatchException;
    }
});

Затем в вашем маршруте вы можете добавить параметр before, например:

Route::get('user', [
    'before' => 'csrf', 
    'uses' => 'UserController@showProfile'
]);

// Ore if you have functional route

Route::get('user', [
    'before' => 'csrf', 
    function(){
        return 'Response here';
    }
]);

Надеюсь, это вам поможет.

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