【问题标题】:Devise reconfirmable not sending设计可重新确认不发送
【发布时间】:2016-07-22 15:21:03
【问题描述】:

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

# 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

我的参数包括 :email 字段。

当我更新电子邮件时,它不会复制到 unconfirmed_email 字段。由于某种原因,该字段仍然为零。

有什么我可能遗漏的想法吗? 我正在使用所有最新版本的 Rails、Devise、Mongoid...

更新!

这让我发疯了。 我继续使用 Devise 自己的注册控制器:

# registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
end

甚至暂停了我自己的用户编辑文档,所以它现在使用基本的设计编辑表单。

而且,它在注册时发送确认就好了,但不发送重新确认。

我在 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 都不会更改。 邮件实际上是更新的,如果没有得到确认,这是不合逻辑的。

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

【问题讨论】:

标签: ruby-on-rails devise


【解决方案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? 的布尔表达式中的每个术语,看看它们是否返回了预期值。

在我的例子中,我发现email_changed 总是错误的,无论电子邮件是否更改。 30 秒后,我发现 email_changedUser.rb 中被覆盖,git blame 表明另一个开发人员在几个月前进行了此 hack,以在导入帐户时跳过发送确认信......删除 hack 可以再次确认工作。

希望这条信息对您有所帮助。祝调试顺利!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2015-12-26
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多