此时我需要一些帮助来实现我的系统要求,我是“Rails上的新手”。我安装了两个宝石(active_admin和devise),经过一些修改后的交互不是我想要的。
我想使用电子邮件和密码(默认的ActiveAdmin行为)构建AdminUser身份验证,并且系统用户已经使用document_type和document_number以及密码进行身份验证。这意味着在系统DB上分别使用不同的登录逻辑来分配两个实体。
问题是ActiveAdmin使用devise进行身份验证,我遇到了/ admin / login页面表单的问题,它显示了从设计初始配置文件中获取的document_type和document字段。我将document_type和文档定义为用户的键。
我发现进行身份验证的解决方法是删除文档和document_type条件,并使用电子邮件作为验证的重要值。现在我的AdminUser模型如下所示:
class AdminUser < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :login, :password, :password_confirmation, :remember_me, :document, :document_type
attr_accessor :document, :document_type
protected
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
puts "Conditions:" + conditions.to_s
document = conditions.delete(:document)
document_type = conditions.delete(:document_type)
where(conditions).where(["lower(email) = :value", { :value => document.strip.downcase }]).first
end
end
可悲的是,我不得不说这对我不起作用。身份验证总是失败,我尝试了很多没有运气的变化
研究我发现了以两种方式使用User模型的有趣想法,但在这种情况下,它们没有共同的属性,并且角色真的不同。
任何人都实现了这样的事情?我希望是的。
欢迎提出想法。