質問

現在のユーザーに関するデータを使用して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
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top