我将数据从旧系统移植到使用ruby on rails编写的新系统。为了让老用户注册,我打算将他们的旧数据转移到新系统,但我无法转移他们的旧密码,所以我打算创建一个随机密码,然后再设置一个密码重置链接并发送给他们一个自定义电子邮件邀请他们到我的新系统。
Devise提供了这个:
user.send_reset_password_instructions
但这会发送一个忘记密码"给用户发电子邮件我只想以某种方式获取忘记密码的URL,以便我可以在我自己的邮件中使用该URL并在以后发送它。我试过抬头,但他们谈论的所有地方" send_reset_password_instructions"功能。知道我怎么能这样做吗?
答案 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)
还值得注意的是,您可以自定义设计邮件程序并提供自己的模板。但是,在这种情况下,它也会影响合法的密码重置电子邮件。