2

我正在使用 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请求的这个异常?

4

2 回答 2

2

Laravel token 未匹配异常码是 419,可以直接用 419 代替$exception->getStatusCode()

于 2018-06-12T07:08:18.597 回答
1

TokenMismatchException 是一个非 Http 异常,因此它不会返回它的状态码。您可以根据需要重定向到所需的视图或登录页面。

于 2018-06-12T06:56:09.427 回答