passport使用auth:api中间件登录验证,已经获取到token了,但是报Unauthenticated错误。
请大佬指点一下,关键是哪里的问题。
基本配置已经完成,Postman测试能接收到token

但是测试请求时报错 Unauthenticated.(Bearer后面的空格已加上)
未通过验证,百度了好久没解决

token生成代码如下:
$login = auth()->guard('apiweb')->attempt($request->only('username', 'password')); if ($login) { $userModel = auth()->guard('apiweb')->user(); $token = $userModel->createToken('api')->accessToken; $userModel->increment('click'); $data = [ 'expire' => 7200, //有效期 'token' => $token //token ]; return response()->json($data, 200); } else { return response()->json(['status' => 1001, 'msg' => '账号或密码有误,请重试'], 401); }config下auth.php 配置如下:
使用apiweb是为了能在auth登录时使用attempt()方法'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'apiweb' => [ 'driver' => 'session', 'provider' => 'apiusers', ], 'api' => [ 'driver' => 'passport', 'provider' => 'apiusers', 'hash' => false, ], ],采用多表验证,用户 user 表,接口用户 Apiuser 表
'providers' => [ 'users' => [ 'driver' => 'eloquent', //使用auth登录时用到的User模型 'model' => App\Models\User::class, ], 'apiusers' => [ 'driver' => 'eloquent', //使用auth登录时用到的ApiUser模型 'model' => App\Models\Apiuser::class, ], ],routes/api.php 配置如下(是我的中间件用的不对吗?):
Route::group(['middleware'=>'auth:api', 'prefix' => 'v1','namespace' => 'Api'], function () { Route::get('users', function () { return '登录成功'; }); });
关于 LearnKu
登录时的 guard 和中间件的 guard 保持一致
一楼说的是
@风吹过有夏天的味道
改成 auth:api 还是显示 "message": "Unauthenticated."
token 生成代码
改成这样。
driver完全不一样,保持用同样的guard。api:passportapiweb:session查了好几天,最后定位问题应该是请求头携带的 token 令牌传送不过去(原因暂时还没找到)
暂时采用的解决办法是在
AuthServiceProvider.php中重新设置请求头传送token