質問
現在のユーザーに関するデータを使用してPlay 2 Scala Password Updateフォームを検証したいです。現在のパスワード、新しいパスワード、および新しいパスワードを再度収集するフォームを想像してください。このフォームの検証については、「現在のパスワード」の値が実際に現在のユーザー実際のパスワードと一致するかどうかです。検証では、現在の要求にアクセスする必要がある現在のユーザーにアクセスする必要があります。
を定義すると、明らかに要求は範囲内ではありません。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(
....
.
この要求依存検証を共有フォーム宣言の中でパッケージ化する方法が大好きです。
解決
暗黙的に定義されたRequest
パラメータを使用して、関数を使用してアップデートパスワードフォームを取得できます。
def updatePasswordForm(implicit request: Request[_]) = Form(
// define form here
).verifying(...)
.
要求パラメータは、bindFromRequest
関数から暗黙的に渡されます。
authenticate
関数は、(再び暗黙的に定義された)要求パラメータにアクセスできるようになりました。あなたはそれを
def authenticate( /* old parameters */ )(implicit request: Request[_]): Boolean = {
// implementation with access to the Request
}
. 所属していません StackOverflow