更新密码时添加密码验证

CR7*_*CR7 3 ruby-on-rails

我对 Rails 项目中的用户进行了以下验证

validates :password,   presence: true, format: { with: /^[a-zA-Z0-9]+$/, multiline: true }, on: :create
Run Code Online (Sandbox Code Playgroud)

如何验证 devise_token_auth 密码更新中的密码

kid*_*ils 5

就这样:

validates :password,   presence: true, format: { with: /^[a-zA-Z0-9]+$/, multiline: true }, if: :password_validation

def password_validation
  new_record? || password_digest_changed?
end
Run Code Online (Sandbox Code Playgroud)

这将在两种情况下触发密码验证:

  1. 当新纪录出现时。
  2. 当尝试更改密码时。

假设您正在使用has_secure_password,它给出passwordpassword_confirmation作为属性,并且password_digest作为字段。Rails 公开了_changed?方法来检查给定属性是否已更改(是否已更改)(且尚未持久化)。

u = User.last
u.email = 'foobar@foobar.com'
u.email_changed? #=> true
u.save #=> true
u.email_changed? #=> false
Run Code Online (Sandbox Code Playgroud)