4

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

任何帮助表示赞赏。

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

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

4

2 回答 2

7

感谢您为我指明正确的方向。问题是由您描述的情况引起的。但是,如果我让 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

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

于 2012-05-15T14:05:20.210 回答
1

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

于 2012-05-14T19:28:07.747 回答