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

Send Password Reset to a Different Email - Devise

我在 rails 5 上使用 ruby 和设计,我需要将密码重置电子邮件发送到与我的用户 table 中存储的不同的电子邮件。如何实现?

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

好吧,将重置指令发送到其他电子邮件的要求已经够奇怪了。真的是万不得已吗?

无论如何,

您没有指定 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,

因此,getter 有点硬编码。

不过,可以创建一个令牌并像 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 耦合过多。