0

我在我的 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处理

有什么帮助吗?谢谢

4

1 回答 1

0

我意识到这是您发布以来的某个时间,但我遇到了同样的问题并解决了它。

就我而言,我已将设计从 v2.0.4 升级到 v2.2.6 - 这似乎是支持 Rails 3 的最新版本。

我浏览了在 v2.2.0 中提到此更改的更改日志:

All mailer methods now expect a second argument with delivery options.

不幸的是,它没有说明第二个参数的具体用途。然而事实证明这确实是您所期望的......传递给您的 Mailersmail方法的选项哈希。

我猜你是否像我一样,你之前的 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
于 2013-08-16T16:08:29.293 回答