在模型中使用 has_secure_password 可以很方便的用 Bcrypt 算法处理用户密码.

此时会引入这样几个方法:

authenticate(unencrypted_password)
password=(unencrypted_password)
password_confirmation=(unencrypted_password)

password_confirmation 值为 nil, 用 password= 直接设置密码, 存储在 password_digest 字段.

password_confirmation 值不为 nil, 用 password= 设置密码前会校验两个值一致.

使用 authentication 校验密码, 简便写法:

User.find_by(name: 'david').try(:authenticate, 'mUc3m00RsqyRe') # => user

注意

  • 密码明文不能为空 (需要在Model中验证 presence)
  • 密码明文长度小于等于72 (自动验证)