Pregunta

Me gustaría validar una Play 2 Scala de actualización de contraseña utilizando el formulario de información sobre el usuario actual.Imagine un formulario que recoge la contraseña actual, nueva contraseña, y de nuevo la nueva contraseña.En la validación de este formulario debe ser si el valor de "contraseña actual" realmente coincide con la corriente de los usuarios reales de la contraseña.En la validación, voy a necesitar acceso para el usuario actual - que requiere acceso a la solicitud actual.Obviamente petición no es en el ámbito cuando me definan la forma:

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

Estoy completamente de apreciar que tener la Solicitud de acceso en el formulario de validación de introducir una no deseada de la dependencia de las Formas.Tengo curiosidad si las personas tienen una inteligente forma de evitar esto.Mi único enfoque hasta ahora es algo como esto:

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

Me encantaría una forma de paquete de Solicitud dependiente de la validación de la derecha dentro de la compartida Formulario de declaración.

¿Fue útil?

Solución

Usted puede obtener su actualización contraseña utilizando el formulario de un la función con un implícitamente definido Request parámetro así:

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

El parámetro de la petición que implícitamente se pasa de la bindFromRequest la función.

El authenticate la función ahora tiene acceso a el (otra vez definidas implícitamente) parámetro de la petición.Es necesario re-definir como

def authenticate( /* old parameters */ )(implicit request: Request[_]): Boolean = {
    // implementation with access to the Request
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top