You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Passport 传入无效token时如何返回自定义错误信息

Laravel Passport 自定义未认证错误响应解决方案

要实现自定义的无效token错误提示,可通过修改Laravel异常处理器快速实现,如需更细粒度的控制也可以自定义中间件,具体操作如下:

方法一:修改全局异常处理器(最简实现)

  • 打开项目中app/Exceptions/Handler.php文件,在顶部引入认证异常类:
use Illuminate\Auth\AuthenticationException;
  • 找到文件中的render方法,添加认证异常的判断逻辑:
public function render($request, Throwable $exception)
{
    // 仅针对API请求返回自定义JSON错误
    if ($exception instanceof AuthenticationException && $request->expectsJson()) {
        return response()->json([
            'code' => 401,
            'message' => '无效的访问令牌,请登录后再操作',
            'data' => null
        ], 401);
    }

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

如果你的API路由统一带api/前缀,也可以将判断条件替换为$request->is('api/*'),适配性更强,不会影响普通Web请求的跳转逻辑。

修改完成后,未携带token或者携带无效token请求受auth:api保护的路由时,就会返回上述自定义的错误响应。

方法二:自定义认证中间件(细粒度控制)

如果需要区分未携带token、token过期、token无效等不同场景返回不同的提示,可以自定义中间件替换默认的auth:api中间件:

  • 执行命令生成中间件文件:
php artisan make:middleware CustomAuthApi
  • 编辑app/Http/Middleware/CustomAuthApi.php编写校验逻辑:
public function handle(Request $request, Closure $next)
{
    // 可扩展更多判断逻辑,比如校验token是否过期、是否被吊销等
    if (!auth('api')->check()) {
        return response()->json([
            'code' => 401,
            'message' => '请携带有效的访问令牌',
            'data' => null
        ], 401);
    }
    return $next($request);
}
  • 打开app/Http/Kernel.php,在$routeMiddleware数组中注册自定义中间件:
protected $routeMiddleware = [
    // 原有其他中间件保持不变
    'custom.auth.api' => \App\Http\Middleware\CustomAuthApi::class,
];
  • 替换路由中使用的中间件:
Route::middleware('custom.auth.api')->group(function () {
    Route::post('/task', [ApiControllerTaskController::class,'store']);
});

内容的提问来源于stack exchange,提问作者Himanshu Rahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:06:02