Laravel form表单中认证失败如何返回自定义消息?

Laravel6.x 请问当authorize方法返回false时,如何自定义消息?

class AmazonOrderRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        Log::debug($this->route('access_id'));
        //アクセス認証
        $api_authority = DB::table('api_authentication')->where('api_name', 'HomePage')->first();
        if (!$api_authority || $api_authority->access_id != $this->json()->get('access_id','') ) {
            return false;
        }
        return true;
    }
}

期望得到的结果

Laravel form表单中认证失败如何返回自定义消息?

实际得到的结果

Laravel form表单中认证失败如何返回自定义消息?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

在当前表单请求验证类中 重写父类 FormRequest 的 failedAuthorization 方法

protected function failedAuthorization()
{
    throw(new HttpResponseException(response()->json([
        'code'=>403,
        'msg'=>'您没有权限进行此操作'
    ],403)));
}

或者在 App\Exceptions\Handler.php 中捕捉 FormRequest 抛出的 AuthorizationException 异常

use Illuminate\Auth\Access\AuthorizationException;
public  function  render($request, Exception $exception) {
    if ($exception instanceof AuthorizationException) {
        return response([
            // ..
        ], 403);
    }
}

建议第一种就可以

5天前 评论
Partrick (楼主) 4天前
讨论数量: 5

app\Exceptions\Handler里面register

      $this->renderable(function (Illuminate\Validation\UnauthorizedException $e, $request) {
                return response()->json([
                     'success' => false,
                     'message' => ''
                ]);
        });

6.x版本应该大差不差

5天前 评论

在Request类里重写failedAuthorization,抛出你要的错误信息就好了 我是8,你6试一下

protected function failedAuthorization()
{
    throw new AuthorizationException('自定义认证失败错误信息');
}
5天前 评论
自由与温暖是遥不可及的梦想

表单验证《Laravel 9 中文文档》

不需要管authorizetrue 还是 false

5天前 评论

在当前表单请求验证类中 重写父类 FormRequest 的 failedAuthorization 方法

protected function failedAuthorization()
{
    throw(new HttpResponseException(response()->json([
        'code'=>403,
        'msg'=>'您没有权限进行此操作'
    ],403)));
}

或者在 App\Exceptions\Handler.php 中捕捉 FormRequest 抛出的 AuthorizationException 异常

use Illuminate\Auth\Access\AuthorizationException;
public  function  render($request, Exception $exception) {
    if ($exception instanceof AuthorizationException) {
        return response([
            // ..
        ], 403);
    }
}

建议第一种就可以

5天前 评论
Partrick (楼主) 4天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!