如何在设计中获取密码重置URL?

时间:2016-03-15 03:14:56

标签: ruby-on-rails devise

我将数据从旧系统移植到使用ruby on rails编写的新系统。为了让老用户注册,我打算将他们的旧数据转移到新系统,但我无法转移他们的旧密码,所以我打算创建一个随机密码,然后再设置一个密码重置链接并发送给他们一个自定义电子邮件邀请他们到我的新系统。

Devise提供了这个: user.send_reset_password_instructions

但这会发送一个忘记密码"给用户发电子邮件我只想以某种方式获取忘记密码的URL,以便我可以在我自己的邮件中使用该URL并在以后发送它。我试过抬头,但他们谈论的所有地方" send_reset_password_instructions"功能。知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:8)

重置密码网址由User模型中的reset_password_token形成。

因此,保存reset password url足以在以后恢复reset_password_token = 'XYZ' # Example token reset_password_url = Rails.application.routes.url_helpers.edit_user_password_path(reset_password_token: reset_password_token)

image_shape

答案 1 :(得分:0)

由于安全(攻击者可以从数据库中读取链接以绕过电子邮件验证),因此Devise存储在user.reset_password_token中的内容只是发送到密码重置链接中的令牌的摘要。

具体来说,在set_reset_password_token method中,enc令牌已保存到数据库,而raw令牌已返回,然后通过密码重置电子邮件发送。

您可以做的是自己重置令牌并将原始令牌保存在以后使用的地方:

raw = user.send(:set_reset_password_token)

还值得注意的是,您可以自定义设计邮件程序并提供自己的模板。但是,在这种情况下,它也会影响合法的密码重置电子邮件。