【Laravel】パスワード確認の機能を使う方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel でパスワード確認の機能を使う方法についてまとめました。
はじめに
パスワード確認機能は、パスワード確認をしてから一定時間経ったユーザーに対して、一部の機能を使う際には改めてパスワード確認を行うというものです。
よりセキュアにユーザーに情報を入力させたい時に使える機能です。
例えば個人情報の更新であったり、クレカ情報とか絶対に漏洩してはいけない情報を扱う際には、パスワード確認機能を付けたくなります。
この機能が Breeze や Jetstream であればデフォルトで備わっており、少し調整するだけで使用することができます。
環境
Laravel 11
Breeze
実装方法
パスワード確認ページ
デフォルトでは、/confirm-password
に URL が指定されています。
routes/auth.php
の
Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
->name('password.confirm');
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
で、指定されています。
このページで改めてパスワードを入力すると、パスワードが入力された時間が記録され、時間内であれば機能を使えます。
パスワード確認の有効時間の変更
config/auth.php
の
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
に設定されており、デフォルトだと3時間みたいです。
もし変更したい場合は、.env
に
AUTH_PASSWORD_TIMEOUT=7200
などと追記して変更しましょう。
リダイレクト先の変更
リダイレクトは、
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
に書かれている通り、app/Http/Controllers/Auth/ConfirmablePasswordController.php
のstore()
内にて、
return redirect()->intended(route('dashboard', absolute: false));
と書かれた部分がリダイレクト先です。
なので、もとのリクエストに戻すようなリダイレクトを書くと複数の機能に使えると思います。
return redirect()->intended(); // 元のリクエストへリダイレクト
ルーティングの書き方
パスワード確認をしたい機能やページでは、以下のようにpassword.confirm
ミドルウェアを通すことでパスワード確認の機能が使えます。
Route::middleware('auth')->group(function () {
//略
Route::middleware('password.confirm')->group(function () {
Route::get('/secure', [SecureController::class, 'index'])->name('secure.index');
});
});
以上、簡単にパスワード確認の機能をつけることができました。
とてもありがたい機能だと思いました。
誰かの参考になれば幸いです。