ユーザー名フィールドを追加済みであることを確認し、ユーザー名を attr_accessible に追加します。ユーザーにログイン仮想属性を作成する
1) ログインを attr_accessor として追加する
# Virtual attribute for authenticating by either username or email
# This is in addition to a real persisted field like 'username'
attr_accessor :login
2) ログインを attr_accessible に追加します
attr_accessible :login
authentication_keys で :login を使用するように Devise に指示します。
config/initializers/devise.rb を次のように変更します。
config.authentication_keys = [ :login ]
ユーザーのDeviseのfind_for_database_authenticationメソッドを上書きします
# Overrides the devise method find_for_authentication
# Allow users to Sign In using their username or email address
def self.find_for_authentication(conditions)
login = conditions.delete(:login)
where(conditions).where(["username = :value OR email = :value", { :value => login }]).first
end
ビューを更新する プロジェクトに Devise ビューがあることを確認して、カスタマイズできるようにします。
remove <%= f.label :email %>
remove <%= f.email_field :email %>
add <%= f.label :login %>
add <%= f.text_field :login %>