我有两个用户模型,第一个来自远程数据库作为遗留和内部公司目的。 (员工登录)。其次是我们的公共注册和登录项目,但我想要一个登录表单。我已经搜索了很长时间,但有些解决方案对我来说很困惑。
第一个遗产看起来像(仅用于阅读和身份验证):
class CrmUser < ActiveRecord::Base
require Rails.root.join('lib', 'devise', 'encryptors', 'sha1')
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable, :rememberable, and :omniauthable
establish_connection "crm_data"
set_table_name :users
devise :database_authenticatable, :encryptable, :authentication_keys => [:login]
alias_attribute :encrypted_password, :crypted_password
alias_attribute :password_salt, :salt
# Setup accessible (or protected) attributes for your model
attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name
其次,对于公众和注册:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable, :rememberable, and :omniauthable
devise :database_authenticatable, :registerable, :authentication_keys => [:login]
alias_attribute :login, :email
# Setup accessible (or protected) attributes for your model
attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name
现在我不知道怎么做用户控制器尝试从第一个模型进行身份验证,当用户不存在时,转到第二个模型再试一次。
使用:
编辑:
在Devise的wiki中有关于多个模型的东西,但我有点困惑,没有更复杂的例子。
谢谢。
此致,Rado
答案 0 :(得分:1)
您应该find_for_authentication
devise/models/authenticatable.rb
方法
module Devise
module Models
module Authenticatable
def find_for_authentication(conditions)
#put your authentication logic here
end
end
end
end
关于身份验证逻辑: 在你的情况下使用两个模型进行身份验证,这真是个坏主意。你想如何与两个用户模型建立关系?这是很多不必要的代码。
解决问题的正确方法是在你的表之间进行一些同步。
尝试使用基本用户模型对用户进行身份验证。
如果用户凭据错误 - 请尝试使用CrmUser模型对其进行身份验证。
如果使用CrmUser进行身份验证,则将他添加到用户表(如果他已经存在)。
返回用户的模型对象。