web-dev-qa-db-ja.com

Passportを使用してLaravel APIで現在のユーザーを取得する方法は?

Laravel API認証にパスポートパッケージを使用しています。データを投稿するとエラーが発生します:

401 Unauthorized "、" error ":{" error ":" Unauthenticated。 "}。

現在のユーザーIDを取得するには、Auth::user()->id;を使用します。

このエラーを解決する方法は?

8
Karthik

このコードは私を助けました:

auth()->guard('api')->user()
8
Gautam Patadiya

最も単純な形式はauth('api')->user();です

5
Rahul Reghunath

関数本体でAuth :: user()-> idを使用する場合。以前にログインしたことがありません。最初にログインAPIを呼び出してトークンを取得してから、次のAPI呼び出しに設定してください。

0
Tung Nguyen

いくつかの手順を実行し、それらがすべて正しいことを確認する必要があります

  1. Laravel Passportのすべてのセットアップ手順に従い、バックエンド側が正しく機能していることを確認します
  2. リクエストを行うときは、認証ヘッダー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");
});
0
Evans M.

以下のようにパスポートを使用して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,
    ],
]);

ドキュメントから laravel passport passing access token

0
Haritsinh Gohil