如何使用Passport获取Laravel API中的当前用户?

时间:2018-01-24 08:33:11

标签: php laravel laravel-5.5 laravel-passport

我正在使用Laravel API身份验证的护照包。当我发布数据时,我收到错误:

  

401未经授权","错误":{"错误":"未经身份验证。"}。

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

如何解决此错误?

6 个答案:

答案 0 :(得分:4)

这段代码对我有帮助:

auth()->guard('api')->user()

答案 1 :(得分:3)

最简单的格式是auth('api')->user();

答案 2 :(得分:0)

在函数主体中使用Auth :: user()-> id时。您尚未登录。 请先调用登录api以获取令牌,然后将其设置为下一个API调用。

答案 3 :(得分:0)

您可以使用护照通过以下方式获得laravel api中的当前用户:

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

但是您得到401 Error,这意味着您没有在Authorization标头中传递access_token或access_token已过期,因此您必须刷新令牌,

您必须在成功登录后获得的access_token标头中传递Authorization

您的用户路线受护照保护,因此,在调用受Passport保护的路线时,您的应用程序的API使用者应在访问令牌中将 Bearer 令牌指定为<他们请求的strong>授权标头。

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

$response = $client->request('GET', '/api/logout', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

来自文档laravel passport passing access token

答案 4 :(得分:0)

您需要执行一些步骤,并确保所有步骤都是正确的

  1. 按照Laravel Passport的所有设置说明进行操作,并确保后端正常工作
  2. 提出请求时,请确保您已通过授权标头Authorization: Bearer xxx-token-here-xxx传递了正确的访问令牌

一旦您确认上述操作正确完成,请确保您的路由受api Guard保护。如果您的路线没有受到保护,那么护照将无法保护他们

以下使用一组路线的示例

Route::group(['prefix' => 'v1',  'middleware' => 'auth:api'], function()
{
    Route::get("articles","ArticleController@read");
    Route::post("articles","ArticleController@create");
});

答案 5 :(得分:0)

您也可以使用此:

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