14

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

我已经像在 Laravel 的文档中一样设置了Passport包,并且成功通过了身份验证,接收了令牌值等等。但是,当我尝试发出get请求时,比如说,/api/user我得到一个Unauthenticated错误作为响应。Authorization正如文档中所述,我将令牌值用作带有键 name 的标头。

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")。但如果它不存在,那么根本不需要身份验证!

请,任何建议或答案都更受欢迎!

4

4 回答 4

5

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

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

public function boot()
{
  $this->registerPolicies();
   Passport::routes();
   Passport::tokensExpireIn(Carbon::now()->addDays(15));
   Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
于 2016-10-06T17:52:54.747 回答
2

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

还要确保更新您的护照。因为最近几周对其进行了一些更改。

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

享受!

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

于 2016-10-21T15:08:04.933 回答
1

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

于 2018-08-19T16:17:19.937 回答
1

我有完全相同的错误,因为我忘记在项目名称之前放 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);
});
于 2016-10-01T04:33:01.167 回答