has_secure_password:如何要求最小长度

时间:2011-06-26 19:47:58

标签: ruby-on-rails-3 activerecord

在Rails 3.1中使用has_secure_password时,如何要求密码具有最小长度?我试着这样做:

class User < ActiveRecord::Base
    ... 
    validates :password, presence: { on: create }, length { minimum: 8 }
    ...
end

但是当表格参数中没有提供密码时,验证会在更新时失败并且密码“太短”。对于其他属性,仅在提供字段的值时才会验证长度。这是has_secure_password实现中的错误还是我做错了什么?

2 个答案:

答案 0 :(得分:4)

您应该执行以下操作:

validates :password, presence: { on: create }, length { minimum: 8 }, :if => :password_changed?

答案 1 :(得分:0)

使用这个:

validates :password, length: { minimum: 8 }, if: :password_digest_changed?

现在此验证将在任何更新密码的尝试中运行,否则不会中断,@apneaddiving 的回答很好,但它有一些小的语法问题并且只会在创建时运行,因此任何密码更新都不会验证。