ruby-on-rails - Ruby on Rails密码验证

标签 ruby-on-rails validation

所以我有有趣的密码验证要求:


当用户注册时,我希望他们必须输入密码并确认并在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/

相关文章:

grails域类验证器+根据字段值设置唯一约束?

forms - Angular 表单验证 : ng-show when at least one input is ng-invalid and ng-dirty

ruby-on-rails - Windows 上的 Ruby on Rails 问题 [msvcrt-ruby18.dll 错误] - 新手问题

ruby-on-rails - Ruby 表达式求值 : whitespace matters?

ruby-on-rails - RSpec redirect_to 和 return 与 redirect_to && return

ruby-on-rails - Rails g 费加罗 :install

ruby-on-rails - 从异常返回消息中删除 "Validation failed"消息

validation - Codeigniter 验证——如何限制数值?

ruby-on-rails - 如何使用哈希 :condition on a . 查找 nil? Rails 中的方法(has_one 关系)

ruby-on-rails - Rails 如何验证可选表单字段?