web-dev-qa-db-ja.com

パスポート-「未認証」。 -Laravel 5.3

_Oauth 2_認証プロセスが既に成功しているのに、なぜ私がunauthenticatedなのかを誰かに説明していただければ幸いです。

LaravelのドキュメントのようにPassportパッケージを設定し、認証に成功し、トークン値などを受け取りました。しかし、getリクエストを実行しようとすると、たとえば、_/api/user_とすると、応答として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")を持っています。しかし、それがなければ、認証はまったく必要ありません。

どんな提案や回答でも大歓迎です!

14
Rikard Olsson

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

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

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

ユーザーモデルとデータベーステーブルを確認してください。プライマリIDフィールド名を変更して「id」または「user_id」以外の何かを言っている場合は、問題が発生する可能性があります。ユーザーモデルとデータベーステーブルのプライマリIDフィールドを "id"として保持するのではなく "acct_id"と変更することに関する問題をデバッグしました。GET/ userを介してユーザーオブジェクトを取得しようとすると、結果は "Unauthenticated"でしたauth:apiミドルウェアを介して。自分でデバッグすることを決定するまで、Sunの下で他のすべての修正を試みたことに留意してください。

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

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

楽しい!

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

2
Andre F.

パスポートmysqlテーブル(php artisan migrate:fresh)、php artisan passport:install 私に役立ちます。テーブルを削除した後、パスポートを再インストールする必要があることに注意してください!

プロジェクト名の前に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);
});
0
confm