2012-04-02 49 views
0

我想實現密碼規則的最小長度爲8和字母數字。新的確認字段現在得到檢查,這些規則應該在創建用戶的新實例時應用,並且還要爲現有用戶更改密碼功能。 1)如果有一個可以做到這一點的grails插件。 2)是基於JavaScript的驗證一個很好的策略,如果不是,我怎麼能沒有插件手動。 在此先感謝在grails中實現密碼規則

回答

0

Ray建議應該工作,因爲他所指的是自定義驗證,這也是1.3.7的一部分。 (它只是他指的是2.0的文檔)您只需要寫下自定義驗證中的所有規則,並且在將對象持久保存到數據庫之前,它將針對所有這些規則進行驗證,或者您可以調用驗證()方法在任何時候在保存之前驗證值。

來到你的問題的第二部分:你應該有相同的JavaScript檢查。

答案是肯定的。客戶端驗證和服務器端驗證總是很好,因爲客戶端驗證將確保用戶體驗更好,服務器端驗證將維護數據的完整性。雖然客戶端驗證也將確保完整性,但由於這些驗證可以通過,所以您不應只依賴這些驗證。

希望這會有所幫助。

0

我可以想到兩種方法。 @ ray-tayek認爲密碼存儲爲Domain類字段,但密碼不夠私密:密碼將作爲純文本通過網絡發送(無論是Intranet還是Internet),並將保存到數據庫以同樣的方式。然而,前者是不正確的,如果你正在使用HTTPS,所以(而不是使用自定義的驗證),您可以使用matches約束,這需要正則表達式(未經測試):

class User { 
    String username 
    String password 

    static constraints = { 
     username blank: false // whatever 
     password minLenght: 8, matches: /^[\d\p{L}]*$/ // Digits or any kind of letter 
    } 
} 

無論如何,我會do使用JavaScript驗證密碼客戶端,當它正確計算散列(如SHA-1)並將其發送到服務器時。在這種情況下,你需要檢查服務器端的散列符合一個SHA-1的字符串,它可以輕鬆完成:

static constraints = { 
     // ... 
     passwordHash matches: /^\b[0-9a-f]{5,40}\b$/ 
    } 

所以,當用戶試圖登錄你應該檢查相互存儲和發送哈希,而不是使用普通密碼。