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

Posted

技术标签:

【中文标题】如何配置 Devise for Ruby on Rails 以将电子邮件和密码存储在用户模型之外的其他位置?【英文标题】:How can I configure Devise for Ruby on Rails to store the emails and passwords somewhere other than in the user model? 【发布时间】:2011-05-28 00:36:12 【问题描述】:

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

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

最坏的情况,如果我只需要破解它,是否有生成器可以将所有内容移植到应用程序?我注意到有一个视图生成器。

【问题讨论】:

这是一个旧帖子,但是当用户注册时,您做了什么来使它工作? (例如,创建关联电子邮件记录的 before_save 过滤器?) 【参考方案1】:

为此,您只需正确设置模型,创建电子邮件关联。此外,您必须从设计中覆盖用户查找方法,为此您必须覆盖 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

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

Devise.setup do |config|
  ...
  config.authentication_keys = [ :emails ]
  ...
end

更新

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

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

【讨论】:

我对 Rails(和编程)非常陌生,在尝试此操作之前有几个问题:因此,如果我将自己的与 gem 同名的方法写入模型,它将自动覆盖宝石?还是我也必须将其从宝石中剥离?另外...在第二个示例中,这是否在外部库/设备/lib/devise.rb 中执行?我没有看到 Devise.setup 做 |config|谢谢! 我也在尝试这个,但是当用户注册时呢?

以上是关于如何配置 Devise for Ruby on Rails 以将电子邮件和密码存储在用户模型之外的其他位置?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 gem Devise 中调整控制器,ruby on rails 4

ruby on rails - 我如何覆盖Devise recoverable.rb - 特别是reset_password_by_token

markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails

将 Stripe 与 Devise 一起用于 Ruby on Rails 订阅

ruby 使用Devise gem验证您的API,使用标头标记。 Ruby on Rails 4.阅读评论。

Heroku上的现有Ruby on Rails Web应用程序(PostgreSQL),Devise身份验证,需要为移动支持添加Rails API