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

Php 使用Laravel Passport获取经过身份验证的用户并授予密码,php,laravel-5,oauth-2.0,laravel-passport,Php,Laravel 5,Oauth 2.0,Laravel Passport,我用Laravel做了一个API REST,现在我正在尝试使用它。问题是我需要在API中对用户进行身份验证,我正在使用该方法。我可以正确地对用户进行身份验证,并且可以获得访问令牌,但从那时起,我看不到在我的消费应用程序中使用访问令牌检索经过身份验证的用户的方法 我在API中尝试了如下路线: Route::get('/user', function(Request $request) { $user = $request->user(); // Even with $

我用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服务器
  • 我有另一个应用程序使用API REST
  • 我知道工作流程。在我的例子中,使用Password Grant,我在我的消费者应用程序中获得用户凭据,然后我向/oauth/token发出请求,将授予类型指定为Password,我提供用户凭据以及我的客户端凭据,我确信它们是使用“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();
}
请注意,路由只是我为在API中进行测试而创建的路由。该路由定义为:


现在。我知道这不起作用。这正是我想要实现的。知道发出请求的用户是否拥有访问令牌/承载令牌。

您需要将访问令牌与每个请求一起传递回去。请查看此部分的文档。

您忘记了相应的中间件

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

当您不提及
auth
中间件时,不会触发身份验证流。这就是为什么您会得到
null

我与您有相同的问题。我在手动定义了身份验证保护后解决了这个问题

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

什么…我不能说“你好”或“你好”在我的帖子中!哈哈,你能添加客户端代码和你收到的错误吗?是404吗?我可以添加代码。但正如我所说,我没有任何错误。我向我想要的API中的wichever路由发出请求,问题是在我的API路由中,我想知道客户端代表哪个用户发出请求。你的意思是,你想知道登录的user?是的。消费应用程序使用的授权类型非常类似于客户端\ U凭据。这意味着应用程序代表自己发出请求。但对于用户,有授权方法和密码授权。这些代表授权用户发出请求。当然。我已经在这样做了。我将更新我的任务如果我不清楚,很抱歉。但是如果身份验证是可选的,那么会发生什么呢?例如,经过身份验证的用户看到了这一点,而未经身份验证的用户看到了其他一些东西。这是解决方案。
Route::get('/user', function (Request $request) {
  return auth()->guard('api')->user();
});