【问题标题】:Rails and Devise how skip validation when reset passwordRails和设计如何在重置密码时跳过验证
【发布时间】:2018-07-26 22:29:03
【问题描述】:

我发现自己面临一个问题,所以我怀疑我是唯一遇到过的人,但我找不到解决方案。

我刚刚在我的用户模型上添加了带有新验证的新字段。我确保将具有不完整个人资料的旧用户重定向到为其填写的表格。

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

【问题讨论】:

  • 能发一下代码吗

标签: ruby-on-rails-4 devise


【解决方案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

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我同时在用户模型上触发了存在验证器和自定义验证器。在某些情况下,我会丢失/不正确的一个或两个,导致用户无法重置他们的密码。您可以通过使用 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多