因此,Devise 3.1现在将摘要令牌存储在数据库中。我使用存储的令牌向注册用户发送跟进电子邮件,如果用户还没有确认他的电子邮件,我会附加一个带有令牌的链接:
Please confirm your account etc.
www.example.com?confirmation_token=<%= user.confirmation_token %>
问题是现在user.confirmation_token
已加密,我无法使用@token
var,因为此操作并非来自设计控制器。
最终,我需要一种方法从用户资源中检索正确的确认网址,而无需通过设计控制器。
有办法吗?
修改
由于现在还没有明确的方法,我在Devise的Github上提出了一个问题,以获得进一步的想法:
答案 0 :(得分:3)
这取决于您何时发送电子邮件。如果您在发送通常的确认电子邮件的同时执行此操作(因此,在创建用户的同一执行循环中),您应该能够通过将此添加到您的用户模型来访问该令牌:< / p>
def get_raw_confirmation_token
return @raw_confirmation_token
end
如果您稍后发送后续电子邮件,则无法检索现有的确认令牌。出于安全目的,它作为单向哈希存储在数据库中。但是,你可以做的是生成一个新的确认令牌,并在你的后续电子邮件中发送。向您的用户模型添加一个新方法,如下所示:
def generate_new_confirmation_token
unless @raw_confirmation_token
generate_confirmation_token!
end
return @raw_confirmation_token
end
这会使您的旧令牌无效,但它会允许您将新的令牌嵌入到电子邮件中。 Devise还提供重新发送旧确认电子邮件的功能,只需在您的用户对象上调用 resend_confirmation_instructions ,电子邮件将重新发送 - 如果确认令牌已过期,它将为您生成一个新的确认令。 / p>