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 '登录成功'; }); });
推荐文章: