【发布时间】:2018-07-26 22:29:03
【问题描述】:
我发现自己面临一个问题,所以我怀疑我是唯一遇到过的人,但我找不到解决方案。
我刚刚在我的用户模型上添加了带有新验证的新字段。我确保将具有不完整个人资料的旧用户重定向到为其填写的表格。
我的问题是,如果老用户忘记了他的密码,他无法重置它,因为保存新密码时验证失败。那么如何使密码重置逃脱验证
【问题讨论】:
-
能发一下代码吗
我发现自己面临一个问题,所以我怀疑我是唯一遇到过的人,但我找不到解决方案。
我刚刚在我的用户模型上添加了带有新验证的新字段。我确保将具有不完整个人资料的旧用户重定向到为其填写的表格。
我的问题是,如果老用户忘记了他的密码,他无法重置它,因为保存新密码时验证失败。那么如何使密码重置逃脱验证
【问题讨论】:
我遇到了类似的问题,在我的情况下,解决方案是添加 if 条件:
validates :new_field, presence: true, if: -> { !encrypted_password_changed? }
关于导致问题的每个验证
更多详情请查看: https://github.com/plataformatec/devise/issues/1623 和 https://guides.rubyonrails.org/active_record_validations.html#conditional-validation
【讨论】:
我遇到了类似的问题,我同时在用户模型上触发了存在验证器和自定义验证器。在某些情况下,我会丢失/不正确的一个或两个,导致用户无法重置他们的密码。您可以通过使用 proc 查找是否存在重置密码令牌(或您预期传递的任何其他设计参数)来逃避这种情况。
validates :a_field, presence: true, unless: Proc.new { |u| u.reset_password_token.present? }
validate :custom_validator_method, unless: Proc.new { |u| u.reset_password_token.present? }
【讨论】:
reset_password_token。