【Rails/devise】rails5のdeviseでusernameとemailのどちらでもログインできるようにする
rails5環境で、deviseで認証を行っているプロダクトで どうしてもemailとusernameの両方でloginできるようにする必要が出た
その時のメモ
公式
devise gem のwikiにまとまっているものがある(なぜか2つ How To: Allow users to sign in using their username or email address · plataformatec/devise Wiki · GitHub How To: Allow users to sign in using their username or email address · plataformatec/devise Wiki · GitHub
プラスでやりたかったこと
wikiのやり方だと、emailとusernameの両方の登録が必要になってしまう。 今回は、emailが存在しないユーザーでも登録できるように email || username であればよしとしたい
その場合、目的のモデルに下記追加する
class User < ApplicationRecord # validationとか記述しつつ def email_required? false if username.present? end def email_changed? false if username.present? end end
やっていることは、deviseのモデルをオーバーライドしている模様 これがないと、validation errorで create時に落ちてしまう