gpt4 book ai didi

php - 使用 Laravel Passport 获取经过身份验证的用户并授予密码

转载 作者:IT王子 更新时间:2023-10-29 00:21:15 26 4
gpt4 key购买 nike

我用 Laravel 做了一个 API REST,现在我正在尝试使用它。问题是我需要在 API 中对用户进行身份验证,我正在使用 Password Grant方法。我可以正确地对用户进行身份验证,并且可以获得访问 token ,但是从那时起,我看不到在我的消费应用程序中使用访问 token 检索经过身份验证的用户的方法。

我在 API 中尝试使用这样的路由:

Route::get('/user', function(Request $request) {
$user = $request->user();
// Even with
$user = Auth::user();

return $user;
});

没有骰子。我正在阅读护照代码,但我无法弄清楚。我的猜测是我需要指定一个新的守卫类型或其他东西,因为 Laravel Passport 似乎没有为这种授权类型提供一个......

澄清事情:

  • 我有一个 API REST 应用程序,它是 oAuth2 服务器。
  • 我有另一个使用 API REST 的应用程序。
  • 我知道工作流程。在我的例子中,使用密码授予,我在我的消费者应用程序中获取用户凭据,然后我向/oauth/token 发出请求,将 grant_type 指定为 password,我提供用户凭据以及我的客户端凭据,我确信它们是使用“php artisan passport:client --password”生成的(注意 --password 选项)
  • 我可以毫无问题地获得访问 token 。我现在需要的是获取我刚刚从 API REST 进行身份验证的用户的 JSON 表示形式。但问题是:我只有一个访问 token 。我无法与用户联系。

我可以吗?也许我可以扩展验证密码授予请求的方法,将生成的访问 token 与它正在验证的用户相关联……*灯泡打开*

消费应用测试代码:

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 route 只是我在API 中做测试用的route。该路线定义为:

Route::get('/user', function(Request $request) {
return $request->user();
});

现在。我知道这是行不通的。这就是我想要实现的。根据 access_token/bearer_token 了解发出请求的用户。

最佳答案

您忘记了合适的中间件。

Route::get('/user', function(Request $request) {
return Auth::user();
})->middleware('auth:api');

当您不提及 auth 中间件时,不会触发身份验证流程。这就是您得到 null 的原因。

关于php - 使用 Laravel Passport 获取经过身份验证的用户并授予密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com