Обрабатывать TokenMismatchException для AJAX-запроса. - PullRequest
0 голосов
/ 12 июня 2018

Я отправляю свои запросы на сервер, используя ajax, и иногда я могу получить TokenMismatchException на сервере.Теперь я хочу справиться с этим как на внутреннем, так и на внешнем интерфейсе.Для этого я использовал ссылку из этой ссылки StackOverflow :

public function render($request , Exception $exception)
{
    //TODO Check the following if() block code validity for production server
    if ($exception instanceof \Illuminate\Session\TokenMismatchException){
        if ($request->expectsJson() ){
            return Response::json([
                'message'      => 'Token mismatch (CSRF token mismatched)' ,
                'message-type' => 'danger' ,
                'new_csrf_token' => csrf_token()
            ], $exception->getStatusCode());
        }
        return redirect()
            ->back()
            ->exceptInput('password')
            ->with([
                'message'      => 'Validation Token was expired. Please try again' ,
                'message-type' => 'danger' ,
            ]);
    }

    return parent::render($request , $exception);
}

Используя этот ответ JSON, я хочу отобразить сообщение с подсказкой на внешнем интерфейсе, а также обновить токен CSRF.повторно отправить запрос.

Но я получаю сообщение об ошибке:

Вызов неопределенного метода Illuminate \ Session \ TokenMismatchException :: getStatusCode ()

Любые идеи, как я могу обработать это исключение для запроса AJAX?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Код исключения совпадения при пропуске токена Laravel - 419, вместо $exception->getStatusCode()

можно использовать непосредственно 419
0 голосов
/ 12 июня 2018

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

...