自定义 laravel sanctum 未授权响应

Posted

技术标签:

【中文标题】自定义 laravel sanctum 未授权响应【英文标题】:Customize laravel sanctum unauthorize response 【发布时间】:2021-10-01 14:11:01 【问题描述】:

我在我的项目中使用 laravel sanctum,但我遇到了一个问题。我想自定义 401 响应代码(未经授权)以在令牌无效时返回 JSON,如下所示:

    
    "data": 
        "code": 401,
        "book": null,
        "success": false,
        "error": 
            "message": "Not authenticated"
        
    

而不是默认响应:


    "message": "Unauthenticated."

如何在 laravel sanctum 中实现这一点?提前致谢。

【问题讨论】:

【参考方案1】:

Rendering exceptions

添加到ExceptionHandler@registerapp/Exceptions/ExceptionHandler.php

$this->renderable(function (\Illuminate\Auth\AuthenticationException $e, $request) 
    if ($request->is('api/*')) 
        return response()->json([
            'message' => 'Not authenticated'
        ], 401);
    
);

【讨论】:

【参考方案2】:

您可以覆盖 Authenticate.php 中间件以输出您想要的消息或捕获 AuthorizationException 以在 Exception/Handler 中显示您想要的消息

public function render($request, Exception $exception)

    if ($exception instanceof AuthorizationException) 
        return response()->json([
         'message' => 'Not authenticated'
        ],401);
    

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

【讨论】:

渲染函数放在哪里? 我认为他的意思是app/Http/Middleware/Authenticate.php

以上是关于自定义 laravel sanctum 未授权响应的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Sanctum 令牌()未定义

带有 laravel sanctum 的 Nuxt 收到“未验证”消息

使用 nuxtjs 登录 laravel sanctum 后出现 401(未验证)错误

使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)[重复]

如何使用 CSRF 令牌测试 Laravel / Sanctum 端点

Laravel Sanctum 无法使用 Postman 登录