使用Laravel护照获取经过身份验证的用户并授予密码
2022-08-30 18:54:31
我用Laravel做了一个API REST,现在我正在尝试使用它。问题是我需要在API中对用户进行身份验证,并且我正在使用密码授予方法。我可以正确对用户进行身份验证,并且可以获取访问令牌,但从那时起,我看不到使用使用访问令牌检索经过身份验证的用户的方法。
我在API中尝试了这样的路由:
Route::get('/user', function(Request $request) {
$user = $request->user();
// Even with
$user = Auth::user();
return $user;
});
没有骰子。我正在阅读护照代码,但我无法弄清楚。我的猜测是,我需要指定一种新的警卫类型或其他东西,因为Laravel Passport似乎没有为这种赠款类型提供一种......
为了澄清事情:
- 我有一个API REST应用程序,它是oAuth2 Server。
- 我有另一个应用程序使用API REST。
- 我知道工作流程。在我的情况下,使用密码授予,我在我的消费者应用程序中获取用户凭据,然后我向/oauth/token发出请求,指定grant_type密码,我提供用户凭据以及我的客户端凭据,我确信它们是使用“php artisan passport:client --password”生成的(请注意--password选项)
- 我可以毫无问题地获取访问令牌。我现在需要的是获取我刚刚从API REST进行身份验证的用户的JSON表示形式。但问题是:我只有一个访问令牌。我无法与用户产生任何联系。
或者我可以吗?也许我可以扩展验证密码授予请求的方法,以将生成的访问令牌与它正在进行身份验证的用户相关联... *灯泡打开*
使用应用程序测试代码:
try {
$client = new Client();
$result = $client->post('https://myapi.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => '5',
'client_secret' => 'my_secret',
'username' => 'user_I_am_authenticating',
'password' => 'the_user_password',
'scope' => '',
]
]);
$access_token = json_decode((string) $result->getBody(), true)['access_token'];
$result = $client->get('https://myapi.com/client/user', [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => "Bearer $access_token",
]
]);
return (string) $result->getBody();
} catch (GuzzleException $e) {
return "Exception!: " . $e->getMessage();
}
请注意,https://myapi.com/client/user 路由只是我在 API 中为测试而创建的路由。该路由定义为:
Route::get('/user', function(Request $request) {
return $request->user();
});
现在。我知道这是行不通的。这就是我想要实现的目标。了解在给定access_token/bearer_token的情况下发出请求的用户。