我在編輯用戶時遇到了驗證問題。一切正常,但每次我想編輯選定的用戶我得到驗證錯誤,第二個密碼(密碼確認)爲空。我知道它是空的,因爲我沒有在我的數據庫中存儲密碼確認。我的應用程序與Grails Documentation的Spring Security Core插件中的用戶類幾乎相同,我沒有更改默認UserController中的任何內容。Grails和彈簧安全核心插件 - 編輯用戶
如何關閉驗證消息?
我在編輯用戶時遇到了驗證問題。一切正常,但每次我想編輯選定的用戶我得到驗證錯誤,第二個密碼(密碼確認)爲空。我知道它是空的,因爲我沒有在我的數據庫中存儲密碼確認。我的應用程序與Grails Documentation的Spring Security Core插件中的用戶類幾乎相同,我沒有更改默認UserController中的任何內容。Grails和彈簧安全核心插件 - 編輯用戶
如何關閉驗證消息?
在你的情況下,它更依賴於你的業務邏輯。如果我假設你在創建頁面上需要confirmPassword
,但在編輯頁面上你不需要它,我會說使用CommandObjects
。
從您的域中刪除confirmPassword。用@Validatable annotation
創建一個命令對象。在那裏寫你的自定義驗證確認密碼。根據您的需求進行調整。 此外,您可以爲一個域擁有多個命令對象,或者我們可以說這些域獨立於域,可以用於任何自定義驗證或操作。
建議您通過this瞭解命令對象及其用法。
對於你的情況,協(簡稱)可能是象下面這樣:
@Validatable
class UserCO {
def springSecurityService
String username
String password
String passwordConfirmation
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static constraints = {
username blank: false, unique: true
password blank: false, size: 5..60, password: true, display: false, validator: { val, obj ->
if (!obj.id && !obj.password) {
return 'validation.user.password'
}
}
passwordConfirmation bindable: true, blank: false, password: true, display: false, validator: { val, obj ->
if (obj.id && (!obj.password)) {
return true
}
if (!(obj.password == obj.passwordConfirmation)) {
return 'passwordMismatch'
}
return true
}
}
}
希望它能幫助!
你passwordConfirmation場域類約束:
passwordConfirmation bindable: true, blank: false, password: true, display: false, validator: { val, obj ->
if (obj.id && (!obj.password)) {
return true
}
if (!(obj.password == obj.passwordConfirmation)) {
return 'passwordMismatch'
}
return true
}
它不能是「空白」,並且必須是相同的「密碼」。 所以,你有2種方式:
passwordConfirmation nullable: true
並通過您的手開始移植腳本或更新庫(需要移除非空約束)。1.如果我從域類中刪除passwordConfirmation,那麼在將用戶添加到數據庫時應該使其起作用,並檢查兩個密碼是否相同? 2.我沒有在數據庫中存儲passwordConfirmation,所以沒有必要將它改爲空:true(我試過了,它沒有工作)。 只要單擊編輯用戶,就會顯示ConfirmPassword不能爲空的消息。 – seemlyMike
,因爲您有約束,它應該不爲空,默認情況下所有字段不爲空。如果您添加可空:true,它必須解決您的問題。所有驗證邏輯,您可以在其中比較來自UI的兩個密碼,您可以採取行動 – Koloritnij
我會盡快檢查並告訴您! – seemlyMike
我在src/groovy中創建了這個類,並且遇到了約束問題。有如下警告:「'用戶名'不能應用於...」 其他我不能使用@Validatable註釋類的事情。也許cuz grails 3? – seemlyMike