【问题标题】:Passport - "Unauthenticated." - Laravel 5.3护照 - “未经身份验证”。 - Laravel 5.3
【发布时间】:2017-01-06 18:43:17
【问题描述】:

我希望有人可以解释为什么我是unauthenticated,而我已经成功执行了Oauth 2 身份验证过程。

我已经像 Laravel 的文档一样设置了 Passport 包,并且我成功通过了身份验证,收到了令牌值等等。但是,当我尝试在/api/user 上执行get 请求时,我收到Unauthenticated 错误作为响应。我使用令牌值作为键名 Authorization 的标头,正如文档中所述。

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

这个函数假设我作为认证用户返回我自己,但我只得到Unauthenticated。同样,如果我只返回第一个用户,我将再次收到 Unauthenticated

Route::get('/test', function(Request $request) {
    return App\User::whereId(1)->first();
})->middleware("auth:api");

在来自Laracast 的教程中,指导Passport 的设置,指导者没有在他的路线中有->middleware("auth:api")。但如果它不存在,那么根本不需要身份验证!

请,任何建议或答案都非常欢迎!

【问题讨论】:

  • 也许您可以检查您是否在 Authorization Header 中发送“Bearer
  • 我什至没有得到“未经身份验证”,我立即被重定向到登录页面。
  • 您在routes\api.php 文件中写入的所有routes默认api 中间件 保护。因此,您可以删除您对 ->middleware("auth:api") 的明确提及。
  • 除了@Urizev 评论之外,您是否还可以检查您的令牌是否未过期和/或被撤销以防万一。您的路线转换为 yourapproute/user ,因此请确保您请求的是此路线而不是 yourapproute/api/user 。使用 php artisan route:list 验证您的路由受 auth:api 保护

标签: authentication laravel-5.3 laravel-passport


【解决方案1】:

您必须为要生成的令牌设置到期日期,

将您的 AuthServiceProvider 中的引导方法设置为类似于下面的代码并尝试生成新令牌。护照默认过期返回负数

public function boot()
{
  $this->registerPolicies();
   Passport::routes();
   Passport::tokensExpireIn(Carbon::now()->addDays(15));
   Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}

【讨论】:

【解决方案2】:

检查您的用户模型和数据库表,如果您已将主 id 字段名称修改为“id”甚至“user_id”以外的内容,您可能会遇到问题。我调试了一个关于修改我的用户模型和数据库表中的主 id 字段以说“acct_id”而不是将其保持为“id”的问题,当我尝试通过 GET /user 获取用户对象时结果是“未验证”通过 auth:api 中间件。请记住,在我决定自己调试之前,我已经尝试过所有其他修复。

还请务必更新您的护照。因为最近几周对其进行了一些更改。

我将在下面链接我的参考资料,它非常详细且明确地说明了我所做的事情以及我如何获得解决方案。

享受吧!

https://github.com/laravel/passport/issues/151

【讨论】:

    【解决方案3】:

    我有这个错误,因为我删除了护照 mysql 表(php artisan migrate:fresh),php artisan passport:install 帮助了我。请记住,删除表后,您需要重新安装护照!

    【讨论】:

      【解决方案4】:

      我遇到了完全相同的错误,因为我忘记在项目名称前加上 http。

      use Illuminate\Http\Request;
      
      Route::get('/', function () {
          $query = http_build_query([
              'client_id' => 3,
              'redirect_uri' => 'http://consumer.dev/callback',
              'response_type' => 'code',
              'scope' => '',
          ]);
      
          // The redirect URL should start with http://
          return redirect('passport.dev/oauth/authorize?'.$query);
      });
      
      Route::get('/callback', function (Request $request) {
          $http = new GuzzleHttp\Client;
      
          $response = $http->post('http://passport.dev/oauth/token', [
              'form_params' => [
                  'grant_type' => 'authorization_code',
                  'client_id' => 3,
                  'client_secret' => 'M8y4u77AFmHyYp4clJrYTWdkbua1ftPEUbciW8aq',
                  'redirect_uri' => 'http://consumer.dev/callback',
                  'code' => $request->code,
              ],
          ]);
      
          return json_decode((string) $response->getBody(), true);
      });
      

      【讨论】:

        猜你喜欢
        • 2019-02-28
        • 2019-06-14
        • 2017-04-24
        • 1970-01-01
        • 2018-02-25
        • 2018-05-02
        • 2017-03-06
        • 2018-09-01
        • 1970-01-01
        相关资源
        最近更新 更多