我想使用关于当前用户的数据验证播放2 Scala密码更新表单。想象一下,一个形式,可以再次收集当前密码,新密码和新密码。在验证此表单时应是“当前密码”的值是否实际匹配当前用户的实际密码。在验证中,我需要访问当前用户 - 这需要访问当前请求。当我定义表单时,显然请求不在范围内:

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(
  ....
.

我希望在共享表格声明内部将此请求相关的验证包装的方法。

有帮助吗?

解决方案

您可以使用 function 使用隐式定义的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