【发布时间】:2019-07-27 02:41:44
【问题描述】:
所以我使用php artisan passport:client 创建了一个客户端,当我向 oauth/token 发出 POST 请求时,幸运的是我取回了一个令牌。
但是,当我尝试通过将它放在我的标头中并转到 auth:api 受保护的路由来使用该令牌时,我得到 401 未授权。
不过,使用不同的登录路径似乎可行。当我在我的 api 控制器中使用此路由时:
Route::post('/login', 'Auth\LoginController@login')->name('login');
代码如下:
public function login(Request $request) {
$input = $request->all();
if (Auth::attempt(['email' => $input['email'], 'password' => $input['password'] ])) {
$user = Auth::user();
return [
'success' => true,
'token' => $user->createToken('test')->accessToken
];
}
return [
'success' => false,
'message' => 'unable to authenticate'
];
}
我取回了一个适用于受保护路由的令牌。
我正在使用 Postman 进行测试,我有标题 Authorization: Bearer <token> 和 Accept: application/json。不知道为什么它以一种方式工作而不是另一种。
编辑:这是受保护的路线:
Route::middleware('auth:api')->get('/user', function (Request $request)
{
return $request->user();
});
使用:
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
【问题讨论】:
-
你们
api中间件包含什么? -
我更新了我的问题
-
你检查返回的token是否存在于数据库中?此外,您传入了一个空范围,这也可能会影响事情。
-
确实如此,但我注意到该令牌的 user_id 列为空。但是,我用来进行身份验证的客户端有一个与之关联的 user_id
-
您刚刚回答了自己的问题,您需要弄清楚为什么
user_id没有设置好。
标签: php laravel laravel-passport