设计可再发送,不发送

时间:2016-04-02 23:04:03

标签: ruby-on-rails devise

设计新帐户的电子邮件确认发送得很好,但重新确认对我不起作用。 我有:

# 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永远不会更改,无论我多久更新一次电子邮件。 电子邮件实际上已更新,如果未确认,则不符合逻辑。

我错过了什么? 我该如何调试呢?

1 个答案:

答案 0 :(得分:1)

我刚遇到同样的问题。

要进行调试,我会覆盖before_updateafter_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.rbgit blame显示其他开发人员在几个月前做了这个黑客攻击,以便在导入帐户时跳过发送确认信....删除黑客重新制作可重复作品。

希望这条信息有所帮助。祝你好运调试!

参考:Confirmable源代码 - https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb