将密码重置发送到不同的电子邮件 – 设计

我在设备轨道5上使用ruby,我需要将密码重置电子邮件发送到与我的用户表中存储的电子邮件不同的电子邮件。 怎么能实现这一目标?

请注意 :这是非常不推荐的实施方式。
它不在最佳实践的范围内。
它又脏又脆。
但是如果你真的需要实现它,无论措施有多脏,就是这样。

好吧,将重置指令发送到其他电子邮件的要求已经很奇怪了。 这真的是最后的手段吗?

无论如何,

你没有指定Devise版本但是这种行为不太可能改变太多,所以让我们拿走当前的master并查看它如何发送电子邮件:

https://github.com/plataformatec/devise/blob/f39c6fd92774cb66f96f546d8d5e8281542b4e78/lib/devise/mailers/helpers.rb#L31

 def headers_for(action, opts) headers = { subject: subject_for(action), to: resource.email, 

因此,吸气剂有点硬编码。

但是,可以创建一个令牌并将其设置为Devise:

https://github.com/plataformatec/devise/blob/d1948b79d3e933253baa753bd033c92171c0a7d0/lib/devise/models/recoverable.rb#L89

 def set_reset_password_token raw, enc = Devise.token_generator.generate(self.class, :reset_password_token) self.reset_password_token = enc self.reset_password_sent_at = Time.now.utc save(validate: false) raw end 

当在源代码中找到Devise如何发送它并尝试以某种方式复制它,但使用您的自定义电子邮件。

我认为在这种情况下,较不邪恶的只是为那种使用与Devise相同的URL的重置指令实现自己的邮件程序。
否则你会与当前版本的Devise有太多耦合。