2016-01-12 114 views
2

我在編輯用戶時遇到了驗證問題。一切正常,但每次我想編輯選定的用戶我得到驗證錯誤,第二個密碼(密碼確認)爲空。我知道它是空的,因爲我沒有在我的數據庫中存儲密碼確認。我的應用程序與Grails Documentation的Spring Security Core插件中的用戶類幾乎相同,我沒有更改默認UserController中的任何內容。Grails和彈簧安全核心插件 - 編輯用戶

如何關閉驗證消息?

回答

1

在你的情況下,它更依賴於你的業務邏輯。如果我假設你在創建頁面上需要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 
     } 
    } 
} 

希望它能幫助!

+0

我會盡快檢查並告訴您! – seemlyMike

+0

我在src/groovy中創建了這個類,並且遇到了約束問題。有如下警告:「'用戶名'不能應用於...」 其他我不能使用@Validatable註釋類的事情。也許cuz grails 3? – seemlyMike

1

你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種方式:

  1. 刪除密碼確認從域類和運行遷移腳本(如果使用)。
  2. 將約束更改爲passwordConfirmation nullable: true 並通過您的手開始移植腳本或更新庫(需要移除非空約束)。
+0

1.如果我從域類中刪除passwordConfirmation,那麼在將用戶添加到數據庫時應該使其起作用,並檢查兩個密碼是否相同? 2.我沒有在數據庫中存儲passwordConfirmation,所以沒有必要將它改爲空:true(我試過了,它沒有工作)。 只要單擊編輯用戶,就會顯示ConfirmPassword不能爲空的消息。 – seemlyMike

+0

,因爲您有約束,它應該不爲空,默認情況下所有字段不爲空。如果您添加可空:true,它必須解決您的問題。所有驗證邏輯,您可以在其中比較來自UI的兩個密碼,您可以採取行動 – Koloritnij

相關問題