Rails设计发送电子邮件到错误的电子邮件地址

时间:2013-05-20 05:00:55

标签: ruby-on-rails devise devise-confirmable

我在我的rails应用程序中成功安装了设备,用户注册工作完美。我还设置了这样一来,用户可以通过发送电子邮件来确认他们的帐户。这在用户第一次注册时工作正常(他们收到带有确认链接的确认消息)。

但是,当用户将其电子邮件地址从exampleuser@gmail.com更改为exampleuser@hotmail.com时,邮件会传递到exampleuser@gmail.com,并且确认链接没有确认令牌

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处理

有任何帮助吗? 感谢

1 个答案:

答案 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
相关问题