我有一个带有 Devise 的 Rails 3.2 应用程序设置。一切都很好,除了当我重置密码(通过内置的路线和方法)时,Devise 允许使用空白密码。如果至少有一个字符,它将验证长度以及它是否与确认匹配。我确实在用户帐户中设置了它,他们可以在不输入密码的情况下更新他们的个人资料,但我认为这与重置密码没有任何关系。
任何帮助表示赞赏。
devise.rb -> http://pastie.org/3911178
user.rb -> http://pastie.org/3911187
我有一个带有 Devise 的 Rails 3.2 应用程序设置。一切都很好,除了当我重置密码(通过内置的路线和方法)时,Devise 允许使用空白密码。如果至少有一个字符,它将验证长度以及它是否与确认匹配。我确实在用户帐户中设置了它,他们可以在不输入密码的情况下更新他们的个人资料,但我认为这与重置密码没有任何关系。
任何帮助表示赞赏。
devise.rb -> http://pastie.org/3911178
user.rb -> http://pastie.org/3911187
感谢您为我指明正确的方向。问题是由您描述的情况引起的。但是,如果我让 devise 处理验证或使用与他们相同的代码,则用户即使在登录后也必须在更新其帐户时提供密码。为了解决此问题,我只是在验证中检查了 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
*更新我刚刚更新了这个以确保密码令牌没有过期。
您应该让设计处理程序密码验证:https ://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb或使用设计用于验证的代码。您的代码的问题是,只有当用户没有设置密码(!encrypted_password.blank?)和其他条件时,您才进行验证。恢复密码时,用户已经设置了密码,因此您无需对密码更新进行验证...