Quantcast
Viewing all articles
Browse latest Browse all 521

Laravel 認証済みユーザーの取得方法

公式ドキュメント

環境

  • PHP: 8.0.2
  • Laravel: 8.28.1

認証済みユーザー取得

Laravelで認証済みユーザーを取得する方法がいくつかあるのでご紹介します。

Authファサード

useIlluminate\Support\Facades\Auth;// 現在認証しているユーザーを取得$user=Auth::user();// 現在認証しているユーザーのIDを取得$id=Auth::id();

authファサード

// 現在認証しているユーザーを取得$user=auth()->user();// 現在認証しているユーザーのIDを取得$id=auth()->id();

Requestインスタンス(メソッドインジェクション)

app/Http/Controllers/FlightController.php
<?phpdeclare(strict_types=1);namespaceApp\Http\Controllers;useIlluminate\Http\Request;useIlluminate\Http\Response;finalclassFlightControllerextendsController{/**
     * @param Request $request
     * @return Response
     */publicfunctionupdate(Request$request):Response{$user=$request->user()// ...}}

Requestインスタンス(コンストラクタインジェクション)

前述まで紹介したものの中ではこのコンストラクタインジェクションのパターンが好きです。

app/Http/Controllers/FlightController.php
<?phpdeclare(strict_types=1);namespaceApp\Http\Controllers;useIlluminate\Http\Request;useIlluminate\Http\Response;finalclassFlightControllerextendsController{publicfunction__construct(privateRequest$request){}/**
     * @return Response
     */publicfunctionupdate():Response{$user=$request->user()// ...}}

リポジトリー層に認証済みユーザー取得する処理を実装する

公式で紹介されている方法はいずれもLaravelフレームワークに依存してしまいます。
フレームワークへの依存を減らすためにリポジトリー層を用意して実装する方法をご紹介します。

  • app/Repository/AuthenticatedUser.php [新規]
  • app/Repository/LaravelAuthenticatedUser.php [新規]
  • app/Providers/AppServiceProvider.php [編集]
  • app/Http/Controllers/FlightController.php [編集]

app/Repository/AuthenticatedUser.php [新規]

新しく AuthenticatedUserインターフェースを定義します。

app/Repository/AuthenticatedUser.php
<?phpdeclare(strict_types=1);namespaceApp\Repository;useApp\Models\User;interfaceAuthenticatedUser{publicfunctionuser():User;publicfunctionid():int;}

app/Repository/LaravelAuthenticatedUser.php [新規]

AuthenticatedUserインターフェースを実装した LaravelAuthenticatedUserクラスを作成します。

app/Repository/LaravelAuthenticatedUser.php
<?phpdeclare(strict_types=1);namespaceApp\Repository;useApp\Models\User;useIlluminate\Auth\Access\AuthorizationException;useIlluminate\Http\Request;finalclassLaravelAuthenticatedUserimplementsAuthenticatedUser{publicfunction__construct(privateRequest$request){}/**
     * @return User
     * @throws AuthorizationException
     */publicfunctionuser():User{$user=$this->request->user();if($user===null){thrownewAuthorizationException('ここから先は通さん!!!');}return$user;}/**
     * @return int
     * @throws AuthorizationException
     */publicfunctionid():int{$id=$this->request->user()?->id;if($id===null){thrownewAuthorizationException('ここから先は通さん!!!');}return$id;}}

app/Providers/AppServiceProvider.php [編集]

AuthenticatedUserインターフェースに対応する LaravelAuthenticatedUser実装するクラスのバインド設定をサービスプロバイダーで行います。

app/Providers/AppServiceProvider.php
<?phpdeclare(strict_types=1);namespaceApp\Providers;useApp\Repository\AuthenticatedUser;useApp\Repository\LaravelAuthenticatedUser;useIlluminate\Support\ServiceProvider;finalclassAppServiceProviderextendsServiceProvider{publicarray$bindings=[AuthenticatedUser::class=>LaravelAuthenticatedUser::class,];}

app/Http/Controllers/FlightController.php [編集]

AuthenticatedUserインターフェースをコントローラ側で使ってみます。

app/Http/Controllers/FlightController.php
<?phpdeclare(strict_types=1);namespaceApp\Http\Controllers;useIlluminate\Http\Request;useIlluminate\Http\Response;finalclassFlightControllerextendsController{publicfunction__construct(privateAuthenticatedUser$authenticatedUser){}/**
     * @return Response
     */publicfunctionupdate():Response{dump($this->authenticatedUser->user());dump($this->authenticatedUser->id());// ...}}

こんな感じでLaravelフレームワーク(ファサードやヘルパー)ではなくAuthenticatedUserインターフェース(抽象)に依存したコードが書けました🙌


Viewing all articles
Browse latest Browse all 521

Trending Articles