كيفية جعل recaptcha تعمل مع مجموعة التحقق من الصحة في ASP.NET (captcha)

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

  •  04-07-2019
  •  | 
  •  

سؤال

أنا أستخدم المكون الإضافي ASP.NET والتحكم المقدم بواسطة recaptcha. يمكنني الحصول على عنصر التحكم بنجاح إذا لم يكن زر الإرسال الموجود على نموذج الويب في مجموعة التحقق من الصحة. لا توجد سمة التحقق من الصحة للتحكم في Recaptcha.

هل حقق أي شخص أي نجاح في هذا أو أي حلول للحصول على التحكم في Recaptcha للعمل عندما يكون هناك مجموعة التحقق من الصحة على نموذج الويب؟

هل كانت مفيدة؟

المحلول

يتم كتابة المكون الإضافي Recaptcha ASP.NET ليكون متوافقًا مع ASP.NET 1.1 ، مما يعني ValidationGroup المفهوم (وهو الجديد في ASP.NET 2.0) غير مدعوم. لكن المكون الإضافي يأتي مع رمز المصدر القابل للتنزيل, ، حتى تتمكن من تعديلها بنفسك لدعمها ValidationGroup.

في ASP.NET 2.0 ، يجب أن يرث المدققون من BaseValidator وتنفيذ IValidator, ، مما يعني أنه يجب عليك تغيير نوع RecaptChacontrol إلى الوراثة من BaseValidator بدلاً من WebControl. سيكون عليك بعد ذلك تعديل الكود قليلاً لتنفيذ جميع الأساليب والخصائص المحددة في BaseValidator. ثم يمكنك استخدام عنصر التحكم الجديد على صفحتك بدلاً من ذلك ، والذي يدعم الآن ValidationGroup.

نصائح أخرى

اعتقدت أنني سأتوسع فقط في تعليقات عدد قليل من الآخرين مع بعض كود العمل ...

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />

<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

والرمز وراء ...

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
    this.RecaptchaControl.Validate();
    e.IsValid = this.RecaptchaControl.IsValid;
}

هل يمكن لأي شخص التفكير في طريقة أبسط للقيام بذلك؟ مجد لفيداليك لأفكار حول استخدام onservervalidate.

يمكنك إضافة CustomValidator ، وتنفيذ OnServerValidate من شأنه التحقق من صحة بيانات RecaptCha. يمكن تعيين CustomValidator إلى أي ValitatorGroup.

هذا عمل بالنسبة لي ...

  1. إضافة مصلحة مخصصة مع مجموعة التحقق الصحيح.

  2. استدعاء طريقة ServerValidate ..

    recaptcha.Validate();
    
  3. ثم تحقق على النحو التالي قبل المعالجة الرئيسية ...

    if (page.isvalid && recaptcha.isvalid) {respose.write ("appal") ؛ }

HTH.

Remotecukاقترح اقتراح لي دون إضافة مصلحة مخصصة.

protected void button_onclick(object sender, EventArgs e){
    recaptcha.Validate();
    if(!Page.IsValid && recaptcha.IsValid){
        lblError.Text = "Please check your captcha entry";
    } else {
        //do your thing
    }
}

للقيام بالتحقق من صحة جانب العميل وبدون تغيير رمز مصدر RecaptCha ، أضفت CustomValidator إلى النموذج الخاص بي وإنشاء وظيفة JavaScript للتحقق من صحة حقل نص الإدخال.

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

لمعرفة ID من حقل الإدخال الذي تم إنشاؤه ، نظرت إلى الكود المصدري للصفحة ولاحظت أن حقل الإدخال كان دائمًاrecaptcha_response_field. (يرجى تصحيحني إذا كنت مخطئًا) مع العلم بذلك ، تمكنت من إنشاء JavaScript (باستخدام jQuery ودالة مخصصة للتحقق من صحة عنصر التحكم).

    function validateRecaptcha(sender, args) {
        args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
    }

ملاحظة: إذا قام المطورون بتغيير إخراج التحكم في Recaptcha ، فقد لا تكون على دراية بالتغيير الذي يؤدي إلى استواصل المدقق إلى العمل.

راجع عناصر التحكم في RecaptChaimage و RecaptChavalidator كونها جزءًا من مجموعة أدوات Altairis Web UI: http://altairiswebui.codeplex.com/

إنها مجموعة مفتوحة من مكونات الويب ، التي تحتوي على معايير لائقة و ASP.NET متوافقة مع المعايير (إذا جاز لي أن أقول أنها المؤلف :-) تنفيذ Recaptcha لنماذج الويب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top