【问题标题】:How to get current user in Laravel API using Passport?如何使用 Passport 在 Laravel API 中获取当前用户?
【发布时间】:2018-07-03 05:34:15
【问题描述】:

我正在使用护照包进行 Laravel API 身份验证。当我发布数据时出现错误:

401 Unauthorized","error":{"error":"Unauthenticated."}.

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

如何解决这个错误?

【问题讨论】:

  • 试试:Route::get('/user', function (Request $request) { return $request->user(); });
  • 您需要将标头中的访问令牌作为Authorization: Bearer <token> 传递给身份验证保护的路由。你这样做吗?
  • @Karthik 我已经发布了我的答案,如果它对你有帮助,请接受并投票!
  • @karthik,有你的解决方案吗?

标签: php laravel laravel-5.5 laravel-passport


【解决方案1】:

这段代码帮助了我:

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

对于短线语法,您可以使用如下内容:

auth('api')->user()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      当您在函数体中使用 Auth::user()->id 时。您之前没有登录过。 请先调用登录api获取token,然后设置为下一个API调用。

      【讨论】:

      • 如何调用登录api?以及如何访问令牌?
      【解决方案4】:

      您可以使用以下护照在 laravel api 中获取当前用户:

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

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

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

      您的用户路由受 Passport 保护,因此当调用受 Passport 保护的路由时,您的应用程序的 API 使用者应将其 访问令牌 指定为 Bearer 令牌在 授权标头。

      例如,当使用 Guzzle HTTP 库时,您可以如下传递:

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

      来自文档laravel passport passing access token

      【讨论】:

        【解决方案5】:

        您需要执行几个步骤并确保它们都是正确的

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

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

        以下使用一组路线的示例

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

        【讨论】:

          【解决方案6】:

          你也可以使用这个:

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

          【讨论】:

            猜你喜欢
            • 2018-07-03
            • 1970-01-01
            • 2016-09-19
            • 2020-07-12
            • 2016-07-07
            • 2019-06-23
            • 2018-09-20
            • 1970-01-01
            相关资源
            最近更新 更多