2017-09-06 96 views
1

我已經在軌用戶下面的驗證項目添加密碼驗證,同時更新密碼

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

我如何可以驗證密碼devise_token_auth密碼更新

+0

這將驗證密碼,如果驗證失敗,將不允許保存,這看起來很好。那麼問題到底是什麼? –

+0

這將僅在創建用戶時進行驗證。對? – CR7

+0

@PamioSolanky我需要在更新密碼時驗證它以及 – CR7

回答

2

你去那裏:

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

def password_validation 
    new_record? || password_digest_changed? 
end 

這將在兩種情況下觸發驗證密碼:

  1. 當它是一個新的記錄。
  2. 嘗試更改密碼時。您正在使用has_secure_password

假設,它給passwordpassword_confirmation爲屬性,而password_digest的領域。 Rails公開_changed?方法來檢查給定屬性是否已更改(is dirty)(並且尚未保留)。

u = User.last 
u.email = '[email protected]' 
u.email_changed? #=> true 
u.save #=> true 
u.email_changed? #=> false 
+0

password_digest_changed?是我們需要在用戶模型 – CR7

+0

中添加的一種方法。假設您正在使用has_secure_password,則不需要添加任何其他字符。在上面的答案中增加更多細節。 – kiddorails

+0

刪除'return if!persisted?',因爲在新記錄的情況下您也需要它。 – kiddorails