设计再确认

use*_*103 20 devise ruby-on-rails-3 devise-confirmable

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

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

我的设置是设计2.1.2是:

用户模型:

attr_accessible: unconfirmed_email, ...

devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable
Run Code Online (Sandbox Code Playgroud)

在initilizer devise.rb中:

config.reconfirmable = true
Run Code Online (Sandbox Code Playgroud)

在路线:

devise_for :users
Run Code Online (Sandbox Code Playgroud)

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

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

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

module Devise::Models::Confirmable
  def send_confirmation_instructions
    debugger
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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

感谢任何帮助,j.

use*_*103 36

好的,这很尴尬..

在深入研究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
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你.很高兴知道当我在模型中更新`email`时,Devise"自动地"填充`unconfirmed_email`.不要忘记将你的答案标记为"已接受"(是的,即使你自己回答了!). (4认同)