バックエンドのスタンダード:Laravel入門
■第5話:認証システムの構築
(最終更新日:2024.06.16)
(絵が小さい場合はスマホを横に)
「ログイン機能を実装しよう」
第5回では、Laravelを使用して認証システムを構築する方法について学ぶ。
認証システムは、ユーザー登録、ログイン機能、パスワードリセット、認証と認可のカスタマイズを含み、
アプリケーションのセキュリティとユーザー管理の基盤となる。
特に、Laravel Breezeを利用した基本的な設定から始め、ユーザーが自分のアカウントを管理できるようにするための機能を実装する。
これにより、アプリケーションの安全性とユーザーエクスペリエンスを向上させることができる。
1.認証の基本設定
Laravelは、認証システムの構築を簡単にするためのビルトイン機能を有する。
これを利用することで、ユーザー登録、ログイン、ログアウトなどの機能を短時間で実装できる。
1.1 認証の導入
Laravelには認証機能が標準で組み込まれており、
Laravel JetstreamやLaravel Breezeといったパッケージを利用することで、非常に簡単に認証機能を追加できる。
ここでは、Laravel Breezeを使用した認証システムの設定方法を説明する。
Laravel Breezeのインストール
下記2つのコマンドを順に実行することで、認証機能に必要なファイルやルートが自動的に生成される。
Laravel Breezeのインストール
フロントエンドのセットアップ
次に、フロントエンドの依存関係をインストールし、ビルドする。
これは下記2つのコマンドを順に実行する。
フロントエンドのセットアップ
マイグレーションの実行
認証システムにはデータベーステーブルが必要だ。
「php artisan migrate」を実行して、マイグレーションを実行する。
これで準備が整った。
1.2 認証ルートとコントローラー
Breezeのインストールにより、認証に関するルートとコントローラーが自動的に設定される。
各ルートの役割は以下の通りだ。これらのルーティングはroutes/web.phpで定義されている。
- /register:ユーザー登録
- /login:ログイン
- /logout:ログアウト
- /forgot-password: パスワードリセット
各ルートの役割
1.3 ビューとテンプレート
Breezeは、認証に必要なビューも生成する。
これらのビューは resources/views/auth ディレクトリに配置される。
そして、Bladeテンプレートエンジンを使用して構築される。
- login.blade.php:ログインページ
- register.blade.php:ユーザー登録ページ
- forgot-password.blade.php:リセットページ
ビューに対応するページ
1.4 ユーザーモデル
Laravelのユーザーモデルは、デフォルトで App\Models\User クラスに定義されている。
このモデルは、認証機能をサポートするために必要な設定が既に含まれている。
ユーザーモデルの定義(標準)
1.5 ミドルウェア
認証システムには、ユーザーがログインしているかどうかを確認するためのミドルウェアが含まれている。
authミドルウェアは、ログインしていないユーザーをログインページにリダイレクトさせる。
ユーザーモデルの定義(標準)
これらの基本設定により、Laravelでの認証システムの構築がスムーズに行うことができる。
2.ユーザー登録とログイン
先にも説明したように、Laravelは認証システムの構築を簡単にするために、ビルトインの認証機能を提供している。
ここでは、Laravel Breezeを使用してユーザー登録とログイン機能を実装する方法を説明する。
2.1 ルーティング
Breezeのインストールにより、以下のような認証に関連するルートが自動的に設定される。
これらは routes/web.php に定義されている。
認証、登録に関するルーティング
2.2 コントローラー
Breezeは、ユーザー登録(App\Http\Controllers\
Auth\RegisteredUserController)とログイン
(App\Http\Controllers\Auth\
AuthenticatedSessionController)に必要なコントローラーも自動生成する。
ユーザー登録コントローラー
ログインコントローラー
2.3 ビュー
Breezeは認証用のビューも生成する。これらのビューは resources/views/authディレクトリに配置される。
ユーザー登録ビュー
(resources/views/auth/register.blade.php)と
ログインビュー
(resources/views/auth/login.blade.php)が作られる。
ユーザー登録ビュー
ログインビュー
第1項で説明したインストールコマンドを実行するだけで、Laravelはこのようなプログラムが自動的に作成、配置される。 これにより、あとは設定を行うだけで、Laravelでユーザー登録とログイン機能を簡単に構築することができる。
3.パスワードリセット機能
ユーザーがパスワードを忘れた場合に、パスワードをリセットできるようにするための機能について解説する。
Laravelは、パスワードリセット機能を簡単に実装できるように、、ビルトインのサポートを提供している。
まずは、1項で説明したようにLaravel Breezeをインストールし、セットアップする。
3.1 ルーティング
前項のログイン機能に加えて、パスワードリセットに必要なルーティングも作成される。
これは、routes/web.php に定義されている。
モデルの作成
3.2 コントローラー
パスワードリセットに必要なコントローラーも自動生成される。
App\Http\Controllers\Auth\
PasswordResetLinkControllerがそれにあたる。
パスワードリセットリンクのリクエスト
加えて、新しいパスワードを設定するためのコントローラーも生成される。
App\Http\Controllers\Auth\
NewPasswordControllerになる。
新しいパスワードの設定
3.3 ビュー
パスワードリセットに必要なビューも生成する。
これらのビューは resources/views/auth ディレクトリに配置される。
下記はリセットをリクエストするViewになる。
パスワードリセットリンクのリクエストビュー
下記はパスワードリセットを実行する際のViewになる。
パスワードリセットビュー
3.4 メールテンプレート
パスワードリセットリンクを送信するためのメールテンプレートは、
resources/views/emails/
password-reset.blade.php に配置されている。
password-reset.blade.phpに配置されたメールテンプレート
これらの設定を行うことで、Laravelでパスワードリセット機能を簡単に構築することができる。 ユーザーはパスワードを忘れた場合に、リセットリンクをメールで受け取り、新しいパスワードを設定できるようになる。
4.認証と認可のカスタマイズ
認証システムの構築の「認証と認可のカスタマイズ」では、Laravelのデフォルトの認証および認可機能をカスタマイズする方法を説明する。
これにより、アプリケーション固有の要件に合わせて認証と認可を調整できる。
Laravelでは、認証と認可を簡単にカスタマイズするためのフレームワークが提供されている。
4.1 認証ガードのカスタマイズ
認証のカスタマイズには、認証ガード、ユーザーモデル、認証コントローラーのカスタマイズが含まれる。
Laravelでは、config/auth.php ファイルを使用して認証ガードを設定できる。
ガードは、ユーザーの認証方法を定義する。
この設定により、APIリクエストに対してトークン認証を使用するようにカスタマイズできる。
下記のhashをfalseにすることで、APIトークンをプレーンテキストのまま簡便に使う方法にしている。
認証ガードのカスタマイズ
4.2 ユーザーモデルのカスタマイズ
ユーザーモデル (App\Models\User) は、認証に関連する属性やメソッドを定義する場所だ。
カスタム属性やメソッドを追加することで、認証プロセスを拡張できる。
パスワードやトークンをAPIレスポンスに表示させることを防いだり、email_verified_atをdatetime型にしたりしている。
属性やメソッドの追加
4.3 認証コントローラーのカスタマイズ
認証プロセスの一部をカスタマイズするために、認証コントローラーを拡張できる。
例えば、ユーザーのログイン後に特定のアクションを実行したり、カスタムバリデーションを追加できる。
認証コントローラーのカスタマイズ
4.4 認可のポリシーのカスタマイズ
認可のカスタマイズには、ポリシー、ゲート、ミドルウェアのカスタマイズが含まれる。
ポリシーは、特定のモデルに対する認可ロジックを定義するクラスだ。
コマンドでポリシーを生成し、それを編集することでカスタム認可ロジックを追加できる。
認可ロジックの追加
4.5 ゲートのカスタマイズ
ゲートは、シンプルな認可ロジックを定義するための方法だ。AuthServiceProvider にゲートを定義する。
ゲートのカスタマイズ
4.6 ミドルウェアのカスタマイズ
認可ミドルウェアをカスタマイズすることで、特定の条件を満たすユーザーのみが特定のルートにアクセスできる。
ゲートのカスタマイズ
このミドルウェアをルートに適用する。
ルートへの適用
これらの一連のカスタマイズにより、Laravelの認証と認可を柔軟に調整し、 アプリケーションの要件に合ったセキュリティを提供することができる。
5.まとめ
第5回では、Laravelを使用して認証システムを構築する方法を学んだ。 Laravel Breezeを用いてユーザー登録、ログイン、パスワードリセット機能を実装し、認証と認可をカスタマイズした。 具体的には、認証ガードの設定、ユーザーモデルのカスタマイズ、認証コントローラーの拡張、ポリシーやゲートの設定、 ミドルウェアの使用方法を詳しく解説する。これにより、アプリケーションのセキュリティとユーザー管理を強化することができる。
▼参考図書、サイト
「改定2版 速習Laravel」 山田祥寛 WINGSプロジェクト
「1週間で基礎から学ぶLaravel入門」 Minatomi