我有一个带有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?) 和其他条件时,才会执行验证。恢复密码时,用户已经设置了密码,因此您不会对密码更新运行验证...