Rails和Devise重设密码时如何跳过验证

时间:2018-07-26 22:29:04

标签: ruby-on-rails-4 devise

我发现自己遇到了问题,所以我怀疑自己是唯一遇到的问题,但是我没有找到解决办法。

我刚刚在用户模型上添加了具有新验证的新字段。我确保将配置文件不完整的旧用户重定向到为其完成表单的表单。

我的问题是,如果旧用户忘记了密码,他将无法重置密码,因为在保存新密码时验证将失败。那么如何使密码重置逃脱验证

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,在我的情况下,解决方案是添加if条件:

validates :new_field, presence: true, if: "!encrypted_password_changed?" 

在每次引起问题的验证中

有关更多详细信息,请检查: https://github.com/plataformatec/devise/issues/1623https://guides.rubyonrails.org/active_record_validations.html#conditional-validation

答案 1 :(得分:0)

我有一个类似的问题,我在用户模型上同时触发了状态验证器和自定义验证器。在某些情况下,一个或两个都会丢失/不正确,从而导致用户无法重置其密码。您可以通过使用proc来查找是否存在重置密码令牌(或预期会传递的任何其他Devise参数),从而避免这种情况。

validates :a_field, presence: true, unless: Proc.new { |u| u.password_reset_token.present? }

validate :custom_validator_method, unless: Proc.new { |u| u.password_reset_token.present? }