14

認証プロセスunauthenticatedがすでに成功しているのに、なぜ私がいるのかを誰かが説明してくれることを願っています。Oauth 2

Laravel のドキュメントのようにパッケージをセットアップし、Passport認証に成功し、トークン値などを受け取りました。getしかし、たとえばでリクエストを実行しようとすると、レスポンスとしてエラーが発生します/api/user。ドキュメントで説明されているようにUnauthenticated、トークン値をキー name のヘッダーとして使用します。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")しかし、そこにない場合は、認証の必要はまったくありません!

提案や回答は大歓迎です。

4

4 に答える 4

5

生成するトークンの有効期限を設定する必要があります。

AuthServiceProvider の boot メソッドを以下のコードのようなものに設定し、新しいトークンを生成してみてください。パスポートのデフォルトの有効期限が負の数を返す

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 フィールドを単に "id" のままにするのではなく、"acct_id" に変更することに関する問題をデバッグしました。 auth:api ミドルウェアを介して。自分でデバッグすることにするまで、太陽の下で他のすべての修正を試みたことを覚えておいてください。

また、必ずパスポートを更新してください。ここ数週間でいくつかの変更が加えられたためです。

以下に参照をリンクします。非常に詳細で、私が何をしたか、どのように解決策にたどり着いたかについて明確に定義されています。

楽しみ!

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

于 2016-10-21T15:08:04.933 に答える
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 に答える