Quantcast
Channel: PHP8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 546

【Laravel】「email」のバリデーションルールの注意

$
0
0
初めに Laravelではデフォルトで様々なバリデーションルールを準備してくれており、生PHPと比べてかなり簡単にバリデーションを設定することができます。 しかし、デフォルトのものには実は注意が必要と言う事をお話しして行きます。 その中で、今回は 『email』のバリデーションルールについて紹介します。 問題点 デフォルトでは、emailの形式ユーザー名(メールアカウント)@ドメイン名でなければバリデーションエラーを出力してくれます。 App\Http\Controllers\Auth\RegisterController.php return Validator::make( $data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:3', 'confirmed'] ] しかし.... 以下のような形式だとバリデーションエラーとはならず登録処理が実行されてしまいます。 test@example.com test@gmail.comああ これではドメインが存在しないアドレスが気軽に登録されてしまう。 それどころか、この状態でサービスをもしリリースしたらとんでもないことになる... emailのバリデーションの種類 公式ドキュメントによると、5種類あります。 rfc: RFCValidation strict: NoRFCWarningsValidation dns: DNSCheckValidation spoof: SpoofCheckValidation filter: FilterEmailValidation 詳細 バリデーションスタイル 内容 rfc RFCと呼ばれるインターネットの標準仕様に合っているかをチェックするバリデーション strict email:rfcをより厳格にしてもので「エラーだけでなく、警告があってもダメ」なバリデーション dns DNSにそのメールアドレスのドメインが存在するかをチェックするバリデーション spoof なりすましのメールアドレスは拒否するバリデーション filter PHP関数のfilter_var()を使ったメールアドレスのチェック バリデーションの書き方 問題となるメールアドレスを通さないだけであれば、dnsのみの設定でも対応はできますが、その他の対策ができていないため併用して書きます。 以下は、strict(RFCに違反するアドレスがはじかれる)、dns(ドメインが有効でないアドレスがはじかれる)、spoof(なりすましメールもはじかれる)の3つを適用します。 App\Http\Controllers\Auth\RegisterController.php return Validator::make( $data, [ 'name' => ['required', 'string', 'max:255'], //emailに新しいバリデーションを追加 'email' => ['required', 'string', 'email:strict,dns,spoof', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:3', 'confirmed'] ] これでemailのバリデーション対策ができます。 最後に Laravelの『email』のバリデーションルールに注意が必要というお話をしてきました! Laravelを触り始めて、色んな人のGitHubのコードを閲覧してきましたが、意外にもこのルールについて知らない人多いんではないでしょうか? 今回の内容だけでなく、便利なメソッドだからといって使うと思わぬ落とし穴があるものは他にもありそうです、、

Viewing all articles
Browse latest Browse all 546

Trending Articles