Laravel API認証にパスポートパッケージを使用しています。データを投稿するとエラーが発生します:
401 Unauthorized "、" error ":{" error ":" Unauthenticated。 "}。
現在のユーザーIDを取得するには、Auth::user()->id;
を使用します。
このエラーを解決する方法は?
このコードは私を助けました:
auth()->guard('api')->user()
最も単純な形式はauth('api')->user();
です
関数本体でAuth :: user()-> idを使用する場合。以前にログインしたことがありません。最初にログインAPIを呼び出してトークンを取得してから、次のAPI呼び出しに設定してください。
いくつかの手順を実行し、それらがすべて正しいことを確認する必要があります
Authorization: Bearer xxx-token-here-xxx
を介して正しいアクセストークンを渡したことを確認してください上記が正しく行われたことを確認したら、ルートがAPIガードによって保護されていることを確認します。ルートが保護されていない場合、パスポートはそれらを保護しません
ルートのグループを使用した以下の例
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function()
{
Route::get("articles","ArticleController@read");
Route::post("articles","ArticleController@create");
});
以下のようにパスポートを使用してlaravel apiで現在のユーザーを取得できます。
Route::get('/user', function (Request $request) {
return $request->user();
});
しかし、401 Error
を取得しているということは、Authorizationヘッダーでaccess_tokenを渡していないか、access_tokenの有効期限が切れているため、トークンを更新する必要があることを意味します。
ログインに成功した後に取得したAuthorization
ヘッダーでaccess_token
を渡す必要があります。
ユーザールートはパスポートによって保護されているため、パスポートによって保護されているルートを呼び出す場合、アプリケーションのAPIコンシューマーはアクセストークンをBearerリクエストのAuthorizationヘッダーのトークン。
たとえば、Guzzle HTTPライブラリを使用する場合、次のように渡すことができます。
$response = $client->request('GET', '/api/logout', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
],
]);