如何处理InvalidSignatureException异常并返回laravel自定义错误JSON响应

问题描述 投票:0回答:1

我不能处理这个异常。 - 我用的try-catch但这不起作用。 - 我用$request->hasValidSignature()但这也不管用。

我能做些什么呢?请帮助我,对不起我的英语。

laravel
1个回答
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']
        ]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.