我有3場一組域對象 - 用戶名,密碼和電子郵件地址 來保存對象之前,我模糊的電子郵件地址,以便它不是存儲在純在我們的數據庫作爲它的一個業務需求的Grails 2.2.0 - 驗證問題
我注意到當我打電話驗證域對象的一些奇怪的行爲。是 的領域約束如下
userName (nullable: false, unique: false,blank: false, size: 4..200,widget: "textField", matches: "[a-zA-Z0-9, [email protected]#~{}!£%&*^()-_]+")
password (nullable: false, unique: false,blank: false, size: 4..200,widget: "textField", password: true, matches: "[a-zA-Z0-9, [email protected]#~{}!£%&*^()-_]+")
emailAddress (nullable: false, unique: false,blank: false, size: 5..200,widget: "textField",email: true, matches: "[a-zA-Z0-9, [email protected]#~{}!£%&*^()-_]+")
爲對象,我對其進行驗證以確保按預期的所有值(EMAILADDRESS尚未混淆) 如果有效我模糊的電子郵件地址,然後調用保存驗證的值:false
奇怪行爲如下 如果我填寫有效的電子郵件地址和有效的密碼 - 對象上的用戶名現場驗證失敗,因爲它不能爲空
如果我填在有效的電子郵件地址中和一個有效的用戶名 - 該對象無法驗證密碼字段,因爲它不能爲空,也在電子郵件地址,它顯示郵件中的電子郵件地址的模糊值
我首先想到混淆導致問題,但它在輸入密碼字段的情況下工作正常 兩種情況下的代碼流完全相同。
難道Grails是呼籲在密碼字段是不是在後,我模糊的電子郵件地址填寫場景的驗證方法?
代碼流程如下
def userLoginUserInstance = UserLoginUser.get(params.id)
userLoginUserInstance.properties = params
if (userLoginUserInstance.validate()) {
//perform updates to database by obfuscating email address first - working fine
} else {
def newObfuscatedEmailAddress = userLoginUserInstance.emailAddress.encodeAsBase64();
userLoginUserInstance.setEmailAddress(newObfuscatedEmailAddress);
render(view: "edit", model: [userLoginUserInstance: userLoginUserInstance])
}
驗證失敗時是,GSP讀取其具有吸氣劑比deObfuscates的電子郵件地址的瞬時變量的電子郵件地址進行模糊處理的原因。當上面的代碼在沒有設置用戶名的情況下運行時,它工作正常,並且電子郵件地址顯示爲正常。 如果密碼爲空,則會顯示密碼錯誤,但是模糊的電子郵件地址會顯示爲無效。
在進一步分析,當我運行的代碼
userLoginUserInstance.setEmailAddress(newObfuscatedEmailAddress);
我明白爲什麼作爲userLoginUserInstance從數據庫中檢索發生這種情況下面一行驗證問題發生。 什麼讓我困惑的是,這並不在所有情況下
向我們展示你如何混淆 – Chris 2013-02-11 15:56:34
我改變我的混淆只是對電子郵件地址進行編碼,當我這樣做時,問題仍然存在。 – Damien 2013-02-11 16:07:12
請澄清錯誤情況 – Chris 2013-02-11 16:17:28