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

TLK*_*TLK 6 authentication ruby-on-rails devise ruby-on-rails-3

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

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

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

谢谢.

dom*_*esz 6

为此,您只需正确设置模型,即可创建电子邮件关联.此外,您必须从设计覆盖用户查找程序方法,为此,您必须覆盖self.find_for_database_authentication(conditions)方法.

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
Run Code Online (Sandbox Code Playgroud)

您还必须将电子邮件添加到devise.rb才能使用它.

Devise.setup do |config|
  ...
  config.authentication_keys = [ :emails ]
  ...
end
Run Code Online (Sandbox Code Playgroud)

我没有运行代码,也许它有一些错误,但我希望你能得到这个想法.请让我知道是不是很清楚.干杯.

更新

第一个问题:是的,来自设计的方法将被自动覆盖.

第二个问题:你应该有your_application_path/config/initializers/devise.rb我认为它是在你使用devise gem时创建的.如果你没有,你可以创建它.我指定的内容很好,只省略点(...)