【问题标题】:Rails devise sending emails to wrong email addressRails 设计向错误的电子邮件地址发送电子邮件
【发布时间】:2013-05-14 14:52:52
【问题描述】:

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

但是,当用户将他/她的电子邮件地址从 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处理

有什么帮助吗? 谢谢

【问题讨论】:

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


    【解决方案1】:

    我知道你发帖已经有一段时间了,但我遇到了同样的问题并解决了。

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

    我浏览了change log,其中提到了 v2.2.0 中的这一变化:

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

    不幸的是,它没有说明第二个参数的具体用途;但事实证明,这确实是您所期望的...传递给您的 Mailers 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-01
      • 2014-07-20
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      相关资源
      最近更新 更多