设计新帐户的电子邮件确认发送得很好,但重新确认对我不起作用。 我有:
# config/initializers/devise.rb
config.reconfirmable = true
当我登录(确认或未确认)并转到设置以更改我的电子邮件地址时,它会保存更改,但不会发送重新确认电子邮件。
我正在使用mongoid。我将字段:unconfirmed_email添加到用户模型(以及确认所需的所有其他内容。正如我所说的确认有效。)。 我的用户更新操作非常简单:
# registrations_controller
def update
current_user.update_attributes(user_update_params)
redirect_to current_user
end
我的参数包括:电子邮件字段。
当我更新电子邮件时,它不会复制到unconfirmed_email字段。由于某种原因,该领域仍然是零。
我可能缺少什么想法? 我使用了所有最新版本的Rails,Devise,Mongoid ......
这让我疯了。 我继续前往Devise自己的注册控制器:
# registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
end
甚至暂停了我自己的用户编辑文档,现在它正在使用基本的Devise Edit表单。
然而,它仍然在注册时发送确认信,但不会发送重新确认。
我在devise.rb初始化程序中有这个:
config.reconfirmable = true
config.allow_unconfirmed_access_for = 2.days and confirmation_sent_at = Time.now
我的数据库字段:
# user.rb
field :confirmation_token, type: String
field :confirmed_at, type: Time
field :confirmation_sent_at, type: Time
field :unconfirmed_email, type: String
我有这些设计设置:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:confirmable,
:omniauthable, :omniauth_providers => [:facebook]
unconfirmed_email永远不会更改,无论我多久更新一次电子邮件。 电子邮件实际上已更新,如果未确认,则不符合逻辑。
我错过了什么? 我该如何调试呢?
答案 0 :(得分:1)
我刚遇到同样的问题。
要进行调试,我会覆盖before_update
和after_commit
(或after_update
for mongoid)的测试方法,如下所示:
# User.rb
def reconfirmation_required?
result = super
debugger
result
end
def postpone_email_change?
result = super
debugger
result
end
当执行被debugger
语句暂停时,我在控制台中的reconfirmation_required?
和postpone_email_change?
的布尔表达式中打印出每个术语,以查看它们是否返回了预期值。 / p>
就我而言,无论电子邮件是否更改,我都发现email_changed
始终为假。 30秒后,我发现在email_changed
中覆盖了User.rb
,git blame
显示其他开发人员在几个月前做了这个黑客攻击,以便在导入帐户时跳过发送确认信....删除黑客重新制作可重复作品。
希望这条信息有所帮助。祝你好运调试!
参考:Confirmable
源代码 - https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb