所以我有有趣的密码验证要求:
当用户注册时,我希望他们必须输入密码并确认并在6..40
之间(该工作范围为100%)
用户更新其个人资料时,将应用相同的验证规则(此工作为100%)
管理员添加用户后,他们只需输入一次密码即可进行验证(无需任何操作)
当管理员编辑用户且密码字段为空白时,它不应更新密码,如果他们输入了密码,则应进行验证。 (部分工作)
validates :password, :presence => true,
:confirmation => true,
:length => {:within => 6..40},
:unless => :force_submit
我无法覆盖的唯一情况是,管理员添加用户时,该用户未通过验证;管理员编辑用户(并输入密码)时,该用户未通过验证。
:force_submit
是从管理表单中传入的,因此密码未经验证。 (因此,更新空密码的情况有效)有什么想法/魔术吗?
最佳答案
这是我在工作中的Rails项目中使用的代码,略微地基于公认的答案。 (注意:我们使用devise
来处理用户身份验证,并使用devise_invitable
来创建新用户。)
PASSWORD_FORMAT = /\A
(?=.{8,}) # Must contain 8 or more characters
(?=.*\d) # Must contain a digit
(?=.*[a-z]) # Must contain a lower case character
(?=.*[A-Z]) # Must contain an upper case character
(?=.*[[:^alnum:]]) # Must contain a symbol
/x
validates :password,
presence: true,
length: { in: Devise.password_length },
format: { with: PASSWORD_FORMAT },
confirmation: true,
on: :create
validates :password,
allow_nil: true,
length: { in: Devise.password_length },
format: { with: PASSWORD_FORMAT },
confirmation: true,
on: :update
关于ruby-on-rails - Ruby on Rails密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123972/