Comment faire fonctionner reCAPTCHA avec un groupe de validation dans ASP.Net (captcha)

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

  •  04-07-2019
  •  | 
  •  

Question

J'utilise le plug-in ASP.Net et le contrôle fournis par reCAPTCHA . Je peux réussir à faire fonctionner le contrôle si le bouton d'envoi du formulaire Web ne se trouve pas dans un groupe de validation. Il n'y a pas d'attribut validationgroup pour le contrôle reCAPTCHA.

Quelqu'un at-il eu du succès avec cela ou avec des solutions pour que le contrôle reCAPTCHA fonctionne lorsqu'il existe un groupe de validation sur le formulaire Web?

Était-ce utile?

La solution

Le plug-in ASP.NET reCAPTCHA est conçu pour être rétro-compatible avec ASP.NET 1.1, ce qui signifie que le concept ValidationGroup (qui est nouveau dans ASP.NET 2.0) n'est pas pris en charge. Toutefois, le plug-in est livré avec le code source téléchargeable , afin que vous puissiez le modifier vous-même pour prendre en charge ValidationGroup .

Dans ASP.NET 2.0, validateurs doit hériter de BaseValidator et implémenter IValidator , ce qui signifie que vous devez modifier le type RecaptchaControl pour hériter de BaseValidator au lieu de . WebControl . Vous devrez ensuite modifier un peu le code pour implémenter toutes les méthodes et propriétés définies dans BaseValidator . Vous pouvez ensuite utiliser ce nouveau contrôle sur votre page, qui prend désormais en charge ValidationGroup .

Autres conseils

Je pensais que je voudrais développer les commentaires de quelques autres avec du code de travail ...

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

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

Et le code derrière ...

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

Quelqu'un peut-il penser à une manière plus simple de le faire? Félicitations à Vidalik pour ses réflexions sur l’utilisation de OnServerValidate.

Vous pouvez ajouter CustomValidator, implémenter OnServerValidate pour valider les données ReCAPTCHA. CustomValidator peut être affecté à n’importe quel groupe de validateurs.

Cela a fonctionné pour moi ...

  1. Ajoutez un validateur personnalisé avec le groupe de validation approprié.

  2. C'est son appel à la méthode ServerValidate ..

    recaptcha.Validate();
    
  3. Vérifiez ensuite les éléments suivants avant le traitement principal ...

    if (Page.IsValid & recaptcha.IsValid) { respose.write ("valide"); }

HTH.

La suggestion de RemotecUk a fonctionné pour moi sans ajouter de validateur personnalisé.

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
    }
}

Pour effectuer la validation requise côté client et sans modifier le code source de reCaptcha, j'ai ajouté un CustomValidator à mon formulaire et créé une fonction JavaScript pour valider le champ de texte de saisie.

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

Pour connaître le ID du champ de saisie généré, j'ai consulté le code source de la page et constaté que le champ de saisie était toujours recaptcha_response_field . (Corrigez-moi si je me trompe.) Sachant cela, j’ai pu créer du JavaScript (en utilisant JQuery et une fonction personnalisée pour vérifier la validité d’un contrôle).

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

REMARQUE: si les développeurs modifient la sortie du contrôle reCaptcha, vous n’êtes peut-être pas au courant du changement entraînant le blocage du validateur.

scroll top