web-dev-qa-db-ja.com

Laravel 5.6-APIコントローラーでauth()-> user()または$ response-> user()を取得する方法?

以下のapi.php routesファイルには、パブリックルートとプライベートルートがあります。

Route::group(['namespace' => 'API'], function() {

     // Public routes (auth not required)
     Route::group([], function() {
         Route::get('/testauth1', 'TestController@testauth1');
         // more public routes...
     });

     // Private routes (auth required)
     Route::group(['middleware' => 'auth:api'], function() {
         Route::get('/testauth2', 'TestController@testauth2');
         // more private routes...
     });

});

TestContollerには、上記の2つのメソッドがあります。

class TestController extends Controller {

    public function testauth1(\Request $request) {
      // return auth()->user(); // does not return user
      return $request->user(); // does not return user
    }

    public function testauth2() {
      return auth()->user(); // returns user
    }

}

プライベートルートグループにはauth:apiミドルウェアがあるため、Authorization Bearerヘッダーで指定されたトークンを確認することにより、ユーザーが認証されていることを確認します。有効なトークンが存在する場合にのみ、プライベートルートが認証済みユーザーにレンダリングされます。これがTestController@testauth2が認証ユーザーを正しく返す理由です。

これで、誰でもトークンの有無にかかわらずパブリックルートにアクセスできます。 Authorization Bearerヘッダーにトークンが指定されていない場合、認証済みユーザーは存在しません。これは理にかなっています。 TestController@testauth1が認証ユーザーを返さないのはこのためです。ただし、ログインしたユーザーが/testauth1パブリックルートにアクセスする場合、トークンはAuthorization Bearerヘッダーで提供されるため、少なくともauth()->user()がない場合はTestController@testauth1で返される必要があります$request->user()を使用しますが、そのメソッドで提供されたトークンでユーザーにアクセスすることはできません。

すべてのパブリックルートメソッドで有効なトークンユーザーにアクセスする方法はありますか?

5
Wonka

apiガードをパラメーターとして渡して、ミドルウェアが要求を保護せずに許可ユーザーを取得します。

$request->user('api');

// Or

auth('api')->user();
26
Aken Roberts

ルート名前空間_\Request_からRequestを参照しています。代わりに、_Illuminate\Http\Request_クラスを参照する必要があります。

パラメーターから_\_を削除し、インポートに次の行を追加する必要があります。

_use Illuminate\Http\Request;_

または、メソッドでリクエストクラスを直接参照することもできます。

_class TestController extends Controller {

    public function testauth1(Illuminate\Http\Request $request) {
        return $request->user();
    }

    public function testauth2() {
        return auth()->user(); // returns user
    }

}
_

auth() ヘルパーメソッドまたは Auth Facadeはグローバルに利用可能です。アクセスしようとしているリクエストに依存しません。 request()および_Request::_ヘルパーについても同じことが言えます。与えている場合、間違ったRequestインスタンスを参照しているため、予期しない結果が生じています。

3
Mark Walet