设计再确认

时间:2012-07-08 22:15:32

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

我想在我的用户模型中使用设计选项:reconfirmable,因此每当用户更改其电子邮件时,他都需要通过电子邮件发送的链接进行确认。

最大的问题是,电子邮件从未发送过......

我的设置是设计2.1.2是:

用户模型:

attr_accessible: unconfirmed_email, ...

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

在initilizer devise.rb中:

config.reconfirmable = true

在路线中:

devise_for :users

以正确设置模型字段unconfirmed_email的形式。我通过控制台检查了这个。

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

我尝试通过将此代码添加到initializers目录来调试问题,以覆盖作为after_update挂钩触发的设计方法:

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

似乎从不调用send_confirmation_instructions,因为我从未进入调试器。

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

感谢任何帮助, 学家

1 个答案:

答案 0 :(得分:35)

好的,这很尴尬..

在深入研究Devise代码后,我发现您不需要设置用户模型的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

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