_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")
を持っています。しかし、それがなければ、認証はまったく必要ありません。
どんな提案や回答でも大歓迎です!
生成するトークンの有効期限を設定する必要があります。
authServiceProviderのbootメソッドを以下のコードのようなものに設定し、新しいトークンを生成してみてください。パスポートのデフォルトの有効期限が負の数を返す
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(15));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
ユーザーモデルとデータベーステーブルを確認してください。プライマリIDフィールド名を変更して「id」または「user_id」以外の何かを言っている場合は、問題が発生する可能性があります。ユーザーモデルとデータベーステーブルのプライマリIDフィールドを "id"として保持するのではなく "acct_id"と変更することに関する問題をデバッグしました。GET/ userを介してユーザーオブジェクトを取得しようとすると、結果は "Unauthenticated"でしたauth:apiミドルウェアを介して。自分でデバッグすることを決定するまで、Sunの下で他のすべての修正を試みたことに留意してください。
ALSO必ずパスポートを更新してください。最近数週間でいくつかの変更が加えられたため。
以下に私の参照をリンクします。これは、私が何をしたか、そしてどのようにして解決策にたどり着いたかについて非常に詳細で明確に定義されています。
楽しい!
パスポート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);
});