문제

현재 사용자에 대한 데이터를 사용하여 Play 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(
  ....

공유 양식 선언 내에서 바로 이 요청 종속 유효성 검사를 패키징하는 방법을 원합니다.

도움이 되었습니까?

해결책

다음을 사용하여 업데이트 비밀번호 양식을 얻을 수 있습니다. 기능 암시적으로 정의된 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