Laravel API дает ответ json при получении ошибки Это действие неавторизовано

Я новичок в Laravel API. Существует функция обновления, которая позволяет пользователям обновлять только свои собственные сообщения. Это сработало. Когда пользователи пытаются обновить сообщение другого пользователя, это также работает, но показывает ошибку, подобную этой картинке. На самом деле я хочу, чтобы это отображалось в ответ json.

Я хочу показать сообщение, как это

{
"status": "error",
"message": "This action is unauthorized",
}

Это мой код для PostController.

public function update(Request $request, Post $post)
{

    $this->authorize('update', $post);    
//this will check the authorization of user but how to make if else statement, if the post belong to the user it will show this json below but if the post belong to other, it will show error message(response json) 


    $post->content = $request->get('content', $post->content);
    $post->save();

    return fractal()
        ->item($post)
        ->transformWith(new PostTransformer)
        ->toArray();

}

Этот код для PostPolicy

public function update(User $user, Post $post)
 {
    return $user->ownsPost($post);
 }

Это код для модели пользователя

public function ownsPost(Post $post)
{
    return Auth::user()->id === $post->user->id;
}

Этот код для AuthServiceProvider

 protected $policies = [
        'App\Post' => 'App\Policies\PostPolicy',
];

Надеюсь, кто-нибудь может мне помочь.


person akmal    schedule 29.04.2017    source источник


Ответы (1)


Я использую Ларавель 5.4

В классе app/Exceptions/Handler.php вы можете изменить функцию рендеринга следующим образом

public function render($request, Exception $exception)
{
    $preparedException = $this->prepareException($exception);

    if ($preparedException instanceof HttpException) {
        return response(
            [
                'message' => sprintf(
                    '%d %s',
                    $preparedException->getStatusCode(),
                    Response::$statusTexts[$preparedException->getStatusCode()]
                ),
                'status' => $preparedException->getStatusCode()
            ],
            $preparedException->getStatusCode(),
            $preparedException->getHeaders()
        );
    }

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

Или, если вы посмотрите дальше на рендеринг, переопределение renderHttpException может быть немного безопаснее. Это удалит пользовательские страницы ошибок в views/errors.

protected function renderHttpException(HttpException $e)
{
    return response(
        [
            'message' => sprintf(
                '%d %s',
                $e->getStatusCode(),
                Response::$statusTexts[$e->getStatusCode()]
            ),
            'status' => $e->getStatusCode()
        ],
        $e->getStatusCode(),
        $e->getHeaders()
    );
}
person fh-jashmore    schedule 31.07.2017