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
結果的に複雑な正規表現をするくらいなら、いっそ簡単にしようという話に纏まったみたい。
なのでメールアドレスを厳密に見たい各位は、deviseを使う際はバリデーションを変更する必要がある旨を留意する必要がある。
※ここからは検証が必要。 恐らくだが、email_regexpを書き換えればバリデーションを変えられるはず。何処で書き換えればいいかはちょっと時間見つけて調査してみようかな。