Laravel中如何将Passport生成的Token作为Authorization头传递并校验
Laravel Passport 强制API需携带Token访问的实现
要实现无Token时返回错误、必须传入Token才能访问API的功能,你需要从路由中间件、控制器逻辑优化两个方面处理:
1. 为路由添加Passport验证中间件
Laravel Passport提供了auth:api中间件,给目标路由加上这个中间件,就能自动验证请求头里的Authorization Token。
修改你的路由定义(以routes/api.php为例):
use App\Http\Controllers\UserController; Route::get('/users/{user}', [UserController::class, 'getalluser'])->middleware('auth:api');
当请求没有携带有效Token时,框架会自动返回401 Unauthorized响应。
2. 优化控制器方法逻辑
你当前的控制器方法存在逻辑冗余:参数User $user是路由模型绑定,框架已经自动根据路由参数{user}查询出对应的User实例,不需要再手动执行User::where('id', $user)->first()。
修正后的getalluser方法:
public function getalluser(User $user) { return response()->json([ 'user' => $user, ]); }
3. 自定义无Token时的错误响应(可选)
如果需要自定义无Token时的返回格式,修改App\Exceptions\Handler.php中的unauthenticated方法:
use Illuminate\Auth\AuthenticationException; protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()) { return response()->json(['message' => '必须携带有效Authorization Token才能访问'], 401); } return redirect()->guest($exception->redirectTo() ?? route('login')); }
配置完成后,当请求未携带Token或Token无效时,API会返回对应的错误信息和401状态码。
内容的提问来源于stack exchange,提问作者vivek kn
相关产品推荐
相关产品推荐

