我想實現密碼規則的最小長度爲8和字母數字。新的確認字段現在得到檢查,這些規則應該在創建用戶的新實例時應用,並且還要爲現有用戶更改密碼功能。 1)如果有一個可以做到這一點的grails插件。 2)是基於JavaScript的驗證一個很好的策略,如果不是,我怎麼能沒有插件手動。 在此先感謝在grails中實現密碼規則
0
A
回答
0
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$/
}
所以,當用戶試圖登錄你應該檢查相互存儲和發送哈希,而不是使用普通密碼。
謝謝,但我們正在使用grails 1.3.7版本,尚未遷移到grails 2.0版本。 – 2012-04-03 00:32:43
應該在1.3.7中工作 – 2012-04-03 01:07:23