请注意:这是非常不推荐的实现方式。
它不在最佳实践的范围内。
它又脏又脆弱。
但如果你真的需要实现它,无论措施有多肮脏,就是这样了。
好吧,将重置指令发送到其他电子邮件的要求已经够奇怪的了。这真的是最后的手段吗?
Anyway,
您尚未指定 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 产生过多的耦合。