私はAPIをしましたREST with Laravel=そして今私はそれを消費しようとしています。APIでユーザーを認証する必要があり、私は使用しています パスワードの付与 メソッド。ユーザーを正しく認証でき、アクセストークンを取得できますが、それ以降、使用中のアプリケーションでアクセストークンを使用して認証済みユーザーを取得する方法がわかりません。
私はこのようなルートでAPIで試しました:
Route::get('/user', function(Request $request) {
$user = $request->user();
// Even with
$user = Auth::user();
return $user;
});
サイコロなし。 Passportコードを読んでいますが、理解できません。私の推測では、Laravel Passportはこの種類の許可タイプに1つを提供しているようには見えないので、新しいガードタイプまたは何かを指定する必要があります...
物事を明確にするには:
または私はできますか?おそらく、パスワード付与要求を認証するメソッドを拡張して、生成されたアクセストークンを認証中のユーザーに関連付けることができます... *電球が点灯します*
アプリケーションテストコードの消費:
try {
$client = new Client();
$result = $client->post('https://myapi.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => '5',
'client_secret' => 'my_secret',
'username' => 'user_I_am_authenticating',
'password' => 'the_user_password',
'scope' => '',
]
]);
$access_token = json_decode((string) $result->getBody(), true)['access_token'];
$result = $client->get('https://myapi.com/client/user', [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => "Bearer $access_token",
]
]);
return (string) $result->getBody();
} catch (GuzzleException $e) {
return "Exception!: " . $e->getMessage();
}
https://myapi.com/client/userrouteは、APIでテストするために作成した単なるルートであることに注意してください。そのルートは次のように定義されます:
Route::get('/user', function(Request $request) {
return $request->user();
});
今。私はこれが機能していないことを知っています。これが私が達成したいことです。 access_token/bearer_tokenを指定して、リクエストを行っているユーザーを把握します。
ありがとう。
適切なミドルウェアを忘れました。
Route::get('/user', function(Request $request) {
return Auth::user();
})->middleware('auth:api');
auth
ミドルウェアに言及しない場合、認証フローは起動されません。 null
を取得する理由です。
あなたにも同じ問題がありました。そして、私は手動で認証ガードを定義した後にそれを解決しました。
Route::get('/user', function (Request $request) {
return auth()->guard('api')->user();
});
リクエストごとにアクセストークンを返す必要があります。この部分のドキュメントを確認してください here