gpt4 book ai didi

ruby-on-rails - 设计可重新确认不发送

转载 作者:行者123 更新时间:2023-12-05 05:23:58 40 4
gpt4 key购买 nike

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

# 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 自己的注册 Controller :

# 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 设置:

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:confirmable,
:omniauthable, :omniauth_providers => [:facebook]

unconfirmed_email 永远不会改变,无论我多久更新一次电子邮件。电子邮件实际上得到了更新,如果没有得到确认,这是不合逻辑的。

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

最佳答案

我刚遇到同样的问题。

为了调试,我重写了 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? 的 bool 表达式中的每一项。和 postpone_email_change?在控制台中查看它们是否返回了预期值。

在我的例子中,我发现无论电子邮件是否更改,email_changed 始终为 false。 30 秒后我发现 email_changedUser.rb 中被覆盖,并且 git blame 显示另一个开发人员几个月前做了这个 hack 来跳过发送导入帐户时的确认信....删除 hack 可以再次确认。

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

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

关于ruby-on-rails - 设计可重新确认不发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379697/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com