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)
很抱歉打扰,但希望这可以帮助有同样问题的人......