23

我想在我的用户模型中使用设计选项 :reconfirmable,所以每当用户更改他的电子邮件时,他需要通过电子邮件发送的链接来确认它。

最大的问题是,电子邮件永远不会发送......

我的设置是与设计 2.1.2 是:

用户模型:

attr_accessible: unconfirmed_email, ...

devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable

在初始化器 devise.rb 中:

config.reconfirmable = true

在路线中:

devise_for :users

在表单中,模型字段 unconfirmed_email 被正确设置。我通过控制台检查了这一点。

当用户在页面上注册时,第一封确认电子邮件会毫无问题地发送出去。

我尝试通过将此代码添加到初始化程序目录以覆盖作为 after_update 钩子触发的设计方法来调试问题:

module Devise::Models::Confirmable
  def send_confirmation_instructions
    debugger
  end
end

似乎从未调用过 send_confirmation_instructions,因为我从未使用过调试器。

我是否需要以某种方式调用 reconfirmable,或者在将模型属性“unconfirmed_email”设置为新的电子邮件地址时是否会自动触发?

感谢您的帮助,j。

4

1 回答 1

43

好吧,这很尴尬。。

在深入研究设计代码后,我发现您不需要设置unconfirmed_email用户模型的属性,只需更改现有的电子邮件属性即可。该属性unconfirmed_email仅用于 Devise 内部用于存储电子邮件地址,直到确认为止。

更高版本的 devise gem 在初始迁移中解释了这一点。这是XXX_devise_create_users.rb迁移中的“可确认”部分(注意最后一行的注释):

  ## Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

抱歉打扰了,但希望这可以帮助遇到同样问题的人......

于 2012-07-11T14:08:34.097 回答