3
2

[Laravel / Fortify] 認証処理を可視化、カスタマイズしよう!

Posted at

プロフィール

  • 私立文系大学3年
  • プログラミング歴は1年1か月
  • Laravel / javascript を主に使用
  • 現在は React を学習中
  • 最近友人にもらった日向坂・上村ひなの写真集を見て、少しハマりそう

Laravel / Fortifyについて

Laravelの認証パッケージには複数の種類がありますが、私は以下の2つの使用経験があります。

  1. Laravel / ui
  2. Fortify

私がLaravelの学習を始めるにあたり、以下の書籍を購入し学習しました。
おそらく最もメジャーな書籍だと思われます。
PHPフレームワーク Laravel入門 第2版

こちらの書籍では認証に Laravel / uiが用いられています。
正直なところ、初心者にはかなり難しいように思えます。
xampp、apache等で環境構築をされる方が多いと思われますが、laravel / uiでは認証用で別のローカルサーバを起動させる必要があります。そのため、かなり少し面倒です(笑)

Fortifyは個人的に大変便利だと思います!

  1. フロントが自由過ぎる
  2. パッケージをインストールすればいいだけ

フロントは全て自分で書きます!
inputタグのname属性さえ遵守すれば、全て自由です!
ですが、自分で書くのが面倒であまり好まない方も一定数いるようですね(笑)
僕はFortify好きです!

認証処理が記述されているファイル

Fortifyをインストールした時点で以下のパスのファイルに認証処理が記述されています。

登録処理
ーvendor/laravel/fortify/src/Http/Controllers/RegisterdUserController.php
 storeアクション

ログイン処理
ーvendor/laravel/fortify/src/Http/Controllers/AuthenticatedSessionController.php
 storeアクション

ログアウト処理
ーvendor/laravel/fortify/src/Http/Controllers/AuthenticatedSessionController.php
 destroyアクション

vendor内にあるため、リポジトリにpushする際には共有されず、カスタマイズするにはこれらの処理をapp内のコントローラファイルに記述する必要があります。
まあコピペすればいいだけですね!
以下のことが実現することができます。

実現できること

  1. バリデーションのカスタマイズ
  2. 認証後のルーティング操作が柔軟に

前者を実現するにはコピペしたアクションの引数にフォームリクエストを設定
後者を実現するにはアクションの返り値にredirect先を設定

コピペの際の注意点

  1. 使用するクラスの読み込みを必ずする
  2. 使用する関数も必ず記述する

前者に関しては、php intelephence というvscodeの拡張機能を用いると、読み込みのないクラス、使用していないクラス等が分かりやすいため、便利です。
後者に関しては、上記で記載したアクション以外の関数についてですね。

ルーティングの設定

次にルーティングの設定です。
ルーティングをweb.phpに記述する必要があります。

まずFortifyをインストールした時点で、デフォルトでルーティングは設定されます。
ですがvendor内の処理を行うため、コピペしたコントローラファイルの処理を行うように上書きする必要があります。

web.phpに以下のように記述をしましょう。

Route::post('register',[登録処理をコピペしたコントローラ::class,'store']);
Route::post('login',[ログイン処理をコピペしたコントローラ::class,'store']);
Route::post('logout',[ログアウト処理をコピペしたコントローラ::class,'destroy']);

これでルーティングを上書きできました。
もし上手くいかないようでしたら、以下のコマンドでルーティングに対応するアクションを確認してみましょう。私はこちらのコマンドで上記の設定ファイルを探し出し、自分でカスタマイズしました。

php artisan route:list

確認用パスワードを必須としない場合

app/Actions/Fortify/CreateNewUser.phpを編集する必要があります。
以下のように編集しましょう。

'password' => $this->passwordRules(),
上記の記述を削除し、

'password' => ['required'],
こちらに変更

以上の編集をすることで、確認用パスワードは不要になります。

まとめ

色々やりましたが、以上のことを行えば必ずできるかと思われます。
あまり具体的には記述せず、順序のみ記載していますが、認証について少しでも理解が深まると嬉しいです!

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2