题
我想使用关于当前用户的数据验证播放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
}
. 不隶属于 StackOverflow