处理ajax请求的TokenMismatchException

时间:2018-06-12 06:22:19

标签: php json ajax laravel request-response

我正在使用ajax向服务器发送请求,有时候,我可能会在服务器上获得TokenMismatchException。现在,我想在后端和前端处理这个问题。为此,我使用了this StackOverflow link的引用:

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 :(得分:1)

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

答案 1 :(得分:1)

Laravel令牌未命中匹配异常代码为419,您可以直接使用419代替$exception->getStatusCode()