猫の魔法

主にruby系の技術メモを記載

deviseのメールアドレスバリデーション

最近deviseを使う事があったのだが、メールアドレスのバリデーションがどうなっているのか気になっったので調べてみた。

devise/devise_test.rb at master · plataformatec/devise · GitHub

メールアドレスのバリデーションテストは上記で行っている。

で、実際の処理はこっちで、

devise/devise.rb at master · plataformatec/devise · GitHub

モジュール変数としてemail_regexpを定義していて、ここにマッチしないメールアドレスを弾いている。

弾いているのだが、正規表現を見ると以下のように随分あっさりしたチェックになっている。

mattr_accessor :email_regexp
@@email_regexp = /\A[^@\s]+@[^@\s]+\z/

このチェックだと「ほげ@ほげ」でもチェックをすり抜ける。

どういう経緯なのか調べてみると前はもう少し厳しく見ていたようだ。

ただ、テストケースにexample@ttを追加したら通らないという話になり、

Devise::email_regexp rejects unusual but valid email · Issue #3997 · plataformatec/devise · GitHub

結果的に複雑な正規表現をするくらいなら、いっそ簡単にしようという話に纏まったみたい。

updated email_regexp and added test cases by kimgb · Pull Request #4001 · plataformatec/devise · GitHub

なのでメールアドレスを厳密に見たい各位は、deviseを使う際はバリデーションを変更する必要がある旨を留意する必要がある。

※ここからは検証が必要。 恐らくだが、email_regexpを書き換えればバリデーションを変えられるはず。何処で書き換えればいいかはちょっと時間見つけて調査してみようかな。