如何为Ruby on Rails配置Devise以将电子邮件和密码存储在除用户模型之外的其他位置?

时间:2010-12-20 00:32:50

标签: ruby-on-rails authentication devise ruby-on-rails-3

我想将电子邮件存储在单独的表格中,并允许用户保存多封电子邮件并使用其中任何一封电子邮件登录。我还想将密码存储在另一个表中。

如何配置Devise以在其他位置存储身份验证信息?

最糟糕的情况是,如果我不得不入侵它,是否有一个生成器可以将所有内容移植到应用程序中?我注意到视图中有一个生成器。

感谢。

1 个答案:

答案 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 我认为它是在你使用设计宝石时创建的。如果你没有,你可以创建它。我指定的内容很好,只省略了点(...)