Deviseでemail以外の項目でログインする
Deviseではemail/passwordでログインするのが標準ですが、
email以外の項目でログインさせたい場合の対応方法です。
migrate
devise:installでできるmigrationファイルを編集して、
ログインにつかう項目を追加します。
今回はaccountを追加します。
t.string :email # 変更 t.string :account, null: false, default: "" # 追加 add_index :users, :email, unique: true # 削除 add_index :users, :account, unique: true # 追加
View
emailフィールドをaccountに変更します。
/views/devise/sessions/new.html.erb
/views/devise/registrations/new.html.erb
<div class="field"> <%= f.label :email%><br /> <%= f.email_field :email, autofocus: true %> </div>
↓
<div class="field"> <%= f.label :account %><br /> <%= f.text_field :account, autofocus: true %> </div>
Model
user.rbでemailバリデーションメソッドをオーバーライド
def email_required? false end
devise.rb
config.authentication_keys = [ :account ] config.case_insensitive_keys = [ :account ] config.strip_whitespace_keys = [ :account ]