Laravel Passport调用用户数据接口返回Unauthenticated错误求助
排查Laravel Passport "Unauthenticated." 问题
我来帮你定位这个问题,通常出现这个错误是因为路由没加认证中间件、Token传递不正确或者Passport基础配置没做好,咱们一步步排查:
1. 确保details路由应用了auth:api中间件
你的api.php里的details路由看起来没完善,必须加上Passport的认证中间件才能让接口验证Token。修改后的路由应该是这样:
Route::post('details', 'API\PassportController@getDetails')->middleware('auth:api');
只有加上middleware('auth:api'),Laravel才会用Passport来验证请求中的Token。
2. 检查请求时是否正确携带了Token
调用details接口时,必须把登录接口返回的access_token正确传递给服务器,有两种常用方式:
- 请求头方式(推荐):在请求头里添加
Authorization字段,格式为Bearer {你的access_token},比如:Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6Ij... - 请求参数方式:在POST参数里直接带上
access_token,比如:POST /api/details HTTP/1.1 Content-Type: application/x-www-form-urlencoded access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6Ij...
3. 确认Passport的基础配置是否完成
如果上面两步都没问题,那得检查Passport的核心配置:
- 打开
app/Providers/AuthServiceProvider.php,确保boot方法里调用了Passport::routes():public function boot() { $this->registerPolicies(); Passport::routes(); // 必须添加这一行 } - 打开
config/auth.php,确认apiguard的driver设置为passport:'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', // 这里必须是passport,不能是默认的token 'provider' => 'users', 'hash' => false, ], ],
4. 验证登录返回的Token是否有效
登录接口返回的access_token必须是未过期的,你可以在login方法里确认Token生成逻辑正确:
public function login(Request $request) { if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){ $user = Auth::user(); $success['token'] = $user->createToken('MyApp')->accessToken; // 确保这里生成的Token格式正确 return response()->json(['success' => $success], $this->successStatus); } else{ return response()->json(['error'=>'Unauthorised'], 401); } }
如果这些步骤都检查过,应该就能解决Unauthenticated.的问题了。
内容的提问来源于stack exchange,提问作者Pranav Mandlik
相关产品推荐
相关产品推荐

