Laravel でパスワードリセットメールのバリデーションエラーメッセージを表示しないようにする
Laravel 6.x で laravel/ui の認証機能を導入すると、ユーザー登録やパスワード再設定の機能が自動でついてきますよね。便利なのでそのまま使っているというケースもあると思います。
Laravel の公式でも、この機能のエラーメッセージ等の日本語訳の言語ファイルも用意されています。
問題点
しかし、パスワードリセット時におけるエラーメッセージはセキュリティ上よくありません。

存在しないメールアドレスを入力してパスワードを再設定しようとすると、「メールアドレスに一致するユーザーは存在しません。」といったエラーメッセージが表示されます。
一見親切なようですが、ここに問題があります。特定のメールアドレスについて登録されているかされていないかを、第三者が知ることができてしまいます。
第三者に知られないようにするには、メールアドレスがデータベースに存在しているかどうかを正直に表示してはいけないのです。
対策
メールアドレスの形式のバリデーションを通過したときは、データベース登録の有無にかかわらず、「パスワードリセットのメールを送信しました。」と正常系のメッセージを表示する必要があります。もちろんそのメールアドレスがデータベースに存在する場合はメールを送信し、存在しない場合は実際にはメールは送りません。
Laravel では、パスワード再設定のコントローラーである App\Http\Controllers\Auth\ForgotPasswordController
で SendsPasswordResetEmails
トレイトで定義されている sendResetLinkFailedResponse
メソッドを上書きしてやります。
これで、パスワード再設定のときに、エラーメッセージは表示されなくなります。
翻訳のカスタマイズ
あわせて resources/lang/ja/passwords.php
を変更して、親切なメッセージにカスタマイズしておきます。

メールアドレスを打ち間違えたなど、メールが届かない場合のフォローにもなります。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。
キュアコード公式インスタグラム
キュアコード株式会社の新サービス情報や、オフィスライフの素敵な瞬間まで。私たちの日々の営みをご紹介します。