從Grails 1.3.7遷移到2.0.4後,我注意到我的一個域類中存在一個問題,我使用瞬態屬性來處理密碼。在創建對象時未拾取Grails瞬態屬性
我的領域類看起來像這樣(簡化):
package test
class User {
String email
String password1
String password2
//ShiroUser shiroUser
static constraints = {
email(email:true, nullable:false, unique:true)
password1(nullable:true,size:5..30, blank: false, validator: {password, obj ->
if(password==null && !obj.properties['id']){
return ['no.password']
}
else return true
})
password2(nullable:true, blank: false, validator: {password, obj ->
def password1 = obj.properties['password1']
if(password == null && !obj.properties['id']){
return ['no.password']
}
else{
password == password1 ? true : ['invalid.matching.passwords']
}
})
}
static transients = ['password1','password2']
}
在1.3.7這個曾經在我的引導工作:
def user1= new User (email: "[email protected]", password1: "123456", password2: "123456")
user1.save()
然而,在Grails的2.0.x版本,這將導致錯誤地指出password1和password2都是空的。 同樣的事情發生在我的控制器,如果我嘗試做:
def user2= new User (params)// params include email,password1 and password2
爲了使其工作,我必須做以下解決方法:
def user2= new User (params)// params include email,password1 and password2
user2.password1=params.password1
user2.password2=params.password2
user2.save()
這是相當難看 - 和討厭。
任何人都可以說如果我的過渡使用在grails 2.x中變得無效,或者這可能是某種框架錯誤?
感謝伯特 - 使這個安全相關的變化感好。只是沒有意識到(新的)可綁定約束。 –
嘿伯特,這是在2.1.0改變?我有一個完全相同的場景,對我們來說,「cnfPassword」仍然爲空!不想爲相同的問題打開一個新的線程:) – Sap
嗨,Burt,它在grails中無法正常工作2.4.3。有沒有其他解決方案可以提供建議? – daimon