我想将电子邮件存储在单独的表格中,并允许用户保存多封电子邮件并使用其中任何一封电子邮件登录。我还想将密码存储在另一个表中。
如何配置Devise以在其他位置存储身份验证信息?
最糟糕的情况是,如果我不得不入侵它,是否有一个生成器可以将所有内容移植到应用程序中?我注意到视图中有一个生成器。
感谢。
答案 0 :(得分:6)
要执行此操作,您只需正确设置模型,即可创建电子邮件关联。此外,您必须从设计覆盖用户查找器方法,为此,您必须覆盖self.find_for_database_authentication(条件)方法。
class User < ActiveRecord::Base
has_many :emails
accepts_nested_attributes_for :emails
...
def self.find_for_database_authentication(conditions)
email = conditions.first
self.where(:emails=>{:name=>email})
end
end
此外,您必须将电子邮件添加到您的devise.rb才能使用它。
Devise.setup do |config|
...
config.authentication_keys = [ :emails ]
...
end
我没有运行代码,也许它有一些错误,但我希望你能得到这个想法。请让我知道是不是很清楚。 欢呼声。
<强>更新强>
第一个问题:是的,设计中的方法会被自动覆盖。
第二个问题:你应该有your_application_path / config / initializers / devise.rb 我认为它是在你使用设计宝石时创建的。如果你没有,你可以创建它。我指定的内容很好,只省略了点(...)