因此 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 上打开了一个问题以获取更多想法:
最佳答案
这取决于您发送电子邮件的时间。如果您在发送通常的确认电子邮件的同时执行此操作(因此,在与创建用户时相同的执行循环内),您应该能够通过将其添加到您的用户模型来访问 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/