如何在Laravel中处理InvalidSignatureException异常并返回自定义错误json响应

时间:2019-02-04 14:42:47

标签: laravel

我无法处理此异常。  -我使用了try-catch,但这不起作用。  -我使用了$request->hasValidSignature(),但这也不起作用。

对此我该怎么办?请帮我,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

在您的App\Exceptions\Handler@render()中,您可以执行以下操作:

public function render($request, Exception $exception)
{
    if($exception instanceof \Illuminate\Routing\Exceptions\InvalidSignatureException) {
        if (request()->ajax() || request()->wantsJson()) {
            return response()->json(['Error' => ['message' => 'Invalid Signature']], 500);
        } 

        return response()->view('errors.invalid-signature', [], 500);
    }

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

如果引发的异常是\Illuminate\Routing\Exceptions\InvalidSignatureException的实例,则将使用位于resources/views/errors/invalid-signature的视图和HTTP代码500来呈现该异常。

如果期望,客户端还可以接收JSON响应。这只是一个例子。随时根据您的需要进行修改。

编辑:根据您的评论,您应该尝试以下操作:

public function verify(Request $request)
{
    try {
        if ($request->route('id') == $request->user()->getKey() && $request->user()->markEmailAsVerified()) {
            event(new Verified($request->user()));
            return response()->json([
                'code' => '200',
                'body' => __('responses.email-verified')
            ]);
        }
    } catch (\Illuminate\Routing\Exceptions\InvalidSignatureException $e) {
        return response()->json([
            'Error' => ['message' => 'Invalid Signature nene']
        ]);
    } catch (\Exception $e) {
        return response()->json([
            'Error' => ['message' => 'An Unknown error occured']
        ]);
    }
}