hamayuzinの日記

ITベンチャーに新卒入社し、エンジニアとかデータサイエンティスト、とかやってます。あの時 あれやってたな的な備忘録にできれば。

【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時に落ちてしまう