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
相关产品推荐
相关产品推荐

