ruby-on-rails - 从 Devise 3 中的用户资源获取确认 URL

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

因此 Devise 3.1 现在将摘要标记存储在数据库中。我使用存储的 token 向注册用户发送后续电子邮件,如果用户尚未确认他的电子邮件,我将附加带有 token 的链接:

Please confirm your account etc.
www.example.com?confirmation_token=<%= user.confirmation_token %>

问题是现在 user.confirmation_token 已加密,我无法使用 @token var,因为此操作不是来自 Devise Controller 。

最终,我需要一种方法来从用户资源检索正确的确认 URL,而无需通过 Devise Controller 。

有办法做到这一点吗?

编辑:

由于现在没有明确的方法来做到这一点,我在 Devise 的 Github 上打开了一个问题以获取更多想法:

https://github.com/plataformatec/devise/issues/2903

最佳答案

这取决于您发送电子邮件的时间。如果您在发送通常的确认电子邮件的同时执行此操作(因此,在与创建用户时相同的执行循环内),您应该能够通过将其添加到您的用户模型来访问 token :

def get_raw_confirmation_token
  return @raw_confirmation_token
end

如果您稍后发送后续电子邮件,您将无法检索现有的确认 token 。出于安全目的,它作为单向哈希存储在数据库中。但是,您可以做的是生成一个新的确认 token ,并将其通过后续电子邮件发送。向您的 User 模型添加一个新方法,如下所示:

def generate_new_confirmation_token
  unless @raw_confirmation_token
    generate_confirmation_token!
  end
  return @raw_confirmation_token       
end

这将使您的旧 token 失效,但它允许您将新 token 嵌入到电子邮件中。 Devise 还提供了重新发送旧确认电子邮件的功能,只需在您的用户对象上调用 resend_confirmation_instructions 即可重新发送电子邮件 - 如果确认 token 已过期,它将为您生成一个新的确认 token 。

关于ruby-on-rails - 从 Devise 3 中的用户资源获取确认 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22046983/

相关文章:

ruby-on-rails - 注册时出现Devise Gem错误

ruby-on-rails - Rails 4 设计错误?

ruby-on-rails - Rails Scoped 有很多通过有很多范围

ruby-on-rails - 呈现成员(member)资格剩余天数的方法 - Ruby on Rails

ruby-on-rails - rails : Default sort order for a rails model?

ruby-on-rails - 如何在rails中扩展belongs_to功能

ruby-on-rails - 如何使用 link_to 添加 Bootstrap 模式,以便链接内容以模式打开?

ruby-on-rails - 在 Refinery CMS 站点中嵌入表单的当前接受的方式是什么?

ruby-on-rails - Rails HABTM - 正确删除关联

ruby-on-rails - 如果用户未经授权,如何使用设计发送 CORS header (401 响应)