moosan63の日記、技術メモ

日記とか、技術メモとか

deviseでモデルごとに認証の方法を変える

devise使ってて、モデルごとに認証の方法を変えるのってできるのー?って思ったのでメモ。

やりたいこと
Userモデル -> e-mailとパスワードでログイン認証
Agentモデル -> ログインIDとパスワードでログイン認証

やりかた
Userモデルはまあそのまま
ここでAgentモデルを色々といじる
まず、migrationファイル

#db/migration/#{migration_hash}.rb
class ChangeAgentDataTypes < ActiveRecord::Migration
  def up
    add_index :agents, :email, :unique => false
  end

  def down
  end
end

:unique => falseにする。
ここで設定しないと、弾かれちゃう。

次にmodelのファイル

#agent.rb
 devise :database_authenticatable, :registerable,
           :recoverable, :rememberable, :trackable, :validatable,
           :authentication_keys => [:login_key] #これを自分が認証に使いたいものに変える

よくいろんなところで
config/initializer/devise.rb
を変更しましょうとか出てくるけど、ここを変えちゃうと全部が変わっちゃうので、個別に変えるときはこうする。