Php 如何使用Passport获取LaravelAPI中的当前用户?

Php 如何使用Passport获取LaravelAPI中的当前用户?,php,laravel,laravel-5.5,laravel-passport,Php,Laravel,Laravel 5.5,Laravel Passport,我正在使用passport包进行Laravel API身份验证。当我发布数据时,我得到错误信息: 401未经授权,“错误”:{“错误”:“未经验证”。} 我使用Auth::user()->id;获取当前用户id 如何解决此错误?此代码帮助我: auth()->guard('api')->user() 对于短线语法,您可以使用如下内容: auth('api')->user() 在函数体中使用auth::user()->id时,最简单的格式是auth('api')->user(

我正在使用passport包进行Laravel API身份验证。当我发布数据时,我得到错误信息:

401未经授权,“错误”:{“错误”:“未经验证”。}

我使用
Auth::user()->id;
获取当前用户id

如何解决此错误?

此代码帮助我:

auth()->guard('api')->user()
对于短线语法,您可以使用如下内容:

auth('api')->user()

在函数体中使用auth::user()->id时,最简单的格式是
auth('api')->user();

。您以前没有登录过。
请先调用登录api以获取令牌,然后将其设置为下一个api调用。

您可以使用passport在laravel api中获取当前用户,如下所示:

Route::get('/user', function (Request $request) {
 return $request->user(); 
});
$response = $client->request('GET', '/api/logout', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);
但是您得到了
401错误
,这意味着您没有在授权标头中传递access\u令牌,或者您的access\u令牌已过期,因此您必须刷新令牌

您必须在成功登录后获得的
Authorization
标题中传递
access\u令牌

您的用户路由受passport保护,因此在调用受passport保护的路由时,应用程序的API使用者应在其请求的授权标头中将其访问令牌指定为承载令牌

例如,使用Guzzle HTTP库时,您可以按如下方式传递它:

Route::get('/user', function (Request $request) {
 return $request->user(); 
});
$response = $client->request('GET', '/api/logout', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

从文档中,您需要遵循几个步骤并确保它们都是正确的

  • 遵循Laravel Passport的所有设置说明,并确保后端正常工作
  • 发出请求时,请确保您已通过授权标头传递了正确的访问令牌
    authorization:Bearer xxx token here xxx
  • 一旦您确认上述操作正确,请确保您的路由受到api guard的保护。如果您的路由未受到保护,则passport将无法保护它们

    下面的示例使用一组路由

    Route::group(['prefix' => 'v1',  'middleware' => 'auth:api'], function()
    {
        Route::get("articles","ArticleController@read");
        Route::post("articles","ArticleController@create");
    });
    
    此外,您还可以使用:

        $user = Auth::guard('api')->user();
    

    Try:
    Route::get('/user',函数(Request$Request){return$Request->user();})
    对于受身份验证保护的路由,您需要将访问令牌作为
    Authorization:Bearer
    传递到头中。您这样做了吗?@Karthik我已经发布了我的答案,如果它有助于您接受并投票的话!@Karthik,找到您的解决方案了吗?如何调用登录api?以及如何访问令牌?