密码重置期间,Devise允许空密码

时间:2012-05-14 18:22:01

标签: ruby-on-rails devise

我在Devise上安装了Rails 3.2应用程序。一切都很好,除了我重置密码(通过内置的路由和方法),Devise允许一个空密码。如果至少有一个字符,它将验证长度以及是否与确认匹配。我确实设置了在用户帐户中的位置,他们可以在不输入密码的情况下更新其个人资料,但我不认为这与重置密码有关。

感谢任何帮助。

devise.rb - > http://pastie.org/3911178

user.rb - > http://pastie.org/3911187

2 个答案:

答案 0 :(得分:7)

感谢您指点我正确的方向。问题是由你所描述的引起的。但是,如果我让设计处理验证或使用相同的代码,用户必须在更新帐户后提供密码,即使他们已登录。要解决此问题,我只是在验证中检查了rest_password_token:

def password_required?
  # If resetting the password
  return true if reset_password_token.present? && reset_password_period_valid?

   # If the person already has a pass, only validate if they are updating pass
  if !encrypted_password.blank?
    password.present? || password_confirmation.present?
  end
end

* UPDATE 我刚刚更新了这个,以确保密码令牌没有过期。

答案 1 :(得分:1)

您应该设计处理程序密码验证:https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb或使用代码设计用于验证。 您的代码的问题是,只有在用户没有设置密码(!encrypted_pa​​ssword.blank?)和其他条件时才进行验证。恢复密码时,用户已设置密码,因此您无法对密码更新运行验证...