読者です 読者をやめる 読者になる 読者になる

Deviseでメールアドレスだけでなくユーザ名を利用して認証する方法

Rails

Deviseでは認証の際にメールアドレスとパスワードを入力して認証します。メールアドレスでなくユーザ名で認証することがあったので、実現する方法を調べました。

  • DBのusersテーブルにusernameを追加
  • app/models/user.rbに以下のメソッドを追加
def self.find_for_database_authentication(conditions)
  value = conditions[authentication_keys.first]
  where(["username = :value OR email = :value", { :value => value }]).first
end
  • app/views/devise/sessions/new.html.erbのemail_fieldをtext_fieldに変更
<%= f.text_field :email %>

これでユーザ名による認証を実現することができました。メールアドレスを入力しても認証されます。

参考:VirtualInterviewSystemの開発(1) プロジェクトの作成と認証プラグインの導入