我想使用關於當前用戶的數據來驗證Play 2 Scala密碼更新表單。想象一下,再次收集當前密碼,新密碼和新密碼的表單。在驗證這個表格時,應該確定「當前密碼」的值是否與當前用戶的實際密碼匹配。在驗證中,我需要訪問當前用戶 - 這需要訪問當前請求。顯然請求是不是在範圍時我定義的形式:在Form Constraints中訪問當前請求
val updatePasswordForm = Form(mapping(
"currPassword" -> password,
"newPassword" -> password,
"newPasswordAgain" -> password)(PasswordUpdate.apply)(PasswordUpdate.unapply)
verifying ("passwordsMustMatch", update => update.newPassword == update.newPasswordAgain)
verifying ("incorrectCurrentPassword", pws => authenticate(GAH NEED CURRENT USERS EMAIL, update.currPassword)))
我完全理解,具有在形式上驗證請求訪問將引入的窗體不需要的依賴關係。我只是很好奇,如果人們有一個聰明的方法來解決這個問題。我到目前爲止唯一的方法是這樣的:
def updatePassword = Action { implicit req =>
validateCurrentPasswordMatches(updatePasswordForm).bindFromRequest.fold(
....
我很想將這種依賴於請求的驗證包裝在共享的Form聲明中。
一種方法是使updatePasswordForm成爲函數而不是val。然後,您可以將Request/userId/User傳遞給它進行驗證。儘管如此,我爲這種驗證所做的只是驗證了摺疊的成功功能。 – thatsmydoing
但我不直接調用驗證碼,所以我無法控制傳入的內容。它在bindFromRequest –