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

时间:2018-01-16 18:20:31

标签: ruby-on-rails ruby devise

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

1 个答案:

答案 0 :(得分:3)

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

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

无论如何,

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

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有太多的耦合。