現在のユーザーに関するデータを使用して、Play2Scalaパスワード更新フォームを検証したいと思います。現在のパスワード、新しいパスワード、および新しいパスワードを再度収集するフォームを想像してみてください。このフォームの検証では、「現在のパスワード」の値が実際に現在のユーザーの実際のパスワードと一致するかどうかを確認する必要があります。検証では、現在のユーザーにアクセスする必要があります。これには、現在のリクエストへのアクセスが必要です。フォームを定義するとき、明らかにリクエストは範囲内にありません。
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(
....
このリクエストに依存する検証を共有フォーム宣言内にパッケージ化する方法が欲しいです。