我在我的rails应用程序中成功安装了设备,用户注册工作完美。我还设置了这样一来,用户可以通过发送电子邮件来确认他们的帐户。这在用户第一次注册时工作正常(他们收到带有确认链接的确认消息)。
但是,当用户将其电子邮件地址从exampleuser@gmail.com
更改为exampleuser@hotmail.com
时,邮件会传递到exampleuser@gmail.com
,并且确认链接没有确认令牌1}
http://{HOST}/users/confirmation
而不是正常的
http://{HOST}/users/confirmation?confirmation_token=TOKEN_HERE
当我重新保存新电子邮件exampleuser@hotmail.com
时,它现在会被传送到此地址,但确认令牌无效,因为它与数据库中的不匹配。
我不知道出了什么问题。
confirmation_instructions.html.erb
<p>Welcome <%= @resource.unconfirmed_email? ? @resource.unconfirmed_email : @resource.email %>!</p>
<p>You can confirm your account email through the link below:</p>
<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>
我在设计初始化程序中也有config.reconfirmable = true
我也使用sideqik来延迟工作。电子邮件全部由sideqik处理
有任何帮助吗? 感谢
答案 0 :(得分:0)
我意识到这是你发布以来的某个时候,但我遇到了同样的问题并解决了它。
在我的情况下,我将设计从v2.0.4升级到v2.2.6 - 这似乎是支持Rails 3的最新版本。
我浏览了change log,提到了v2.2.0中的这一变化:
All mailer methods now expect a second argument with delivery options.
不幸的是,它没有说第二个参数是专门用于什么的;然而事实证明它实际上是你期望的......传递给你的邮件程序mail
方法的选项哈希。
我猜你是否像我一样,你以前的Devise :: Mailer有一条如下所示的行:
def confirmation_instructions(record, opts)
mail :to => record.email, :template_name => 'confirmation_instructions'
end
问题是电子邮件是先前确认的电子邮件地址,而不是新的未经证实的电子邮件地址。因此,您可能希望使用您传递的选项哈希调用邮件,现在将在其:to
密钥中包含unconfirmed_email,例如
{:to => "unconfirmed@email.com"}
只需将您的邮件调用更改为:
def confirmation_instructions(record, opts)
mail opts.merge(:template_name => 'confirmation_instructions')
end