الوصول إلى الطلب الحالي في قيود النموذج

StackOverflow https://stackoverflow.com//questions/12694529

  •  12-12-2019
  •  | 
  •  

سؤال

أرغب في التحقق من صحة نموذج تحديث كلمة مرور 2 سكالا باستخدام بيانات حول المستخدم الحالي.تخيل نموذجا يجمع كلمة المرور الحالية وكلمة المرور الجديدة وكلمة المرور الجديدة مرة أخرى.عند التحقق من صحة هذا النموذج ، يجب أن يكون ما إذا كانت قيمة "كلمة المرور الحالية" تتطابق بالفعل مع كلمة المرور الفعلية للمستخدمين الحاليين.في التحقق من الصحة ، سأحتاج إلى الوصول إلى المستخدم الحالي-والذي يتطلب الوصول إلى الطلب الحالي.من الواضح أن الطلب ليس في النطاق عندما أعرف النموذج:

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