Question

J'aimerais valider un Jouer 2 Scala mot de passe formulaire de mise à jour à l'aide des données sur l'utilisateur actuel.Imaginez un formulaire qui recueille mot de passe actuel, le nouveau mot de passe et le nouveau mot de passe.La validation de ce formulaire devrait être de savoir si la valeur de "mot de passe actuel" correspond en fait à des utilisateurs actuels du mot de passe actuel.Dans la validation, je vais avoir besoin de l'accès à l'utilisateur actuel - qui nécessite un accès à la demande actuelle.Évidemment, la demande n'est pas dans la portée lorsque j'définir la forme:

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)))

Je suis entièrement d'apprécier que le fait d'avoir Demander l'accès à la validation d'un formulaire d'introduire un indésirable à la dépendance pour les Formulaires.Je suis juste curieux de savoir si les gens ont un astucieux moyen de contourner cela.Ma seule approche jusqu'à présent est quelque chose comme ceci:

def updatePassword = Action { implicit req =>
  validateCurrentPasswordMatches(updatePasswordForm).bindFromRequest.fold(
  ....

J'aimerais bien un moyen de conditionner cette Demande dépendante de la validation de la droite à l'intérieur de l'partagé Formulaire de déclaration.

Était-ce utile?

La solution

Vous pouvez obtenir votre mise à jour formulaire de mot de passe à l'aide d'un la fonction avec un implicitement défini Request paramètre comme ceci:

def updatePasswordForm(implicit request: Request[_]) = Form(
    // define form here
).verifying(...)

Le paramètre de la requête est implicitement répercuté sur de la bindFromRequest fonction.

L' authenticate la fonction a maintenant accès à l' (encore une fois définis implicitement) paramètre de la requête.Vous avez besoin de re-définir comme

def authenticate( /* old parameters */ )(implicit request: Request[_]): Boolean = {
    // implementation with access to the Request
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top