2010-03-31 7 views
1

Je suis en train d'utiliser une ancienne version du Recaptcha validateur sur un projet .net 1.1, qui se trouve ici: http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/Recaptcha Validator dans le projet .NET 1.1

Le code je ressemble beaucoup à un exemple qui se trouvent sur le lien ci-dessus:

<asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox> 
<recatpcha:RecaptchaValidator ID="RecaptchaValidator1" runat="server" Theme="Clean" PublicKey="xxxxxxxxxxxxxx" PrivateKey="xxxxxxxxxx" ControlToValidate="EmailAddress"></recatpcha:RecaptchaValidator> 
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="true" OnClick="Button1_Click" /> 

le comportement que je voudrais est simple: la charge de la page, l'utilisateur est présenté avec un champ pour saisir leur adresse e-mail, un captcha pour terminer, et un bouton de soumission . Sur soumettre, si aucun utilisateur n'est trouvé dans notre base de données avec cette adresse e-mail, ou que le captcha est mal répondu, un nouveau captcha est affiché avec un message d'erreur approprié. Sinon, ils recevront un e-mail sur la façon de réinitialiser leur mot de passe.

Le problème principal est que le captcha ne s'affiche pas lors du chargement de la page. Lorsque j'appuie sur le bouton Soumettre cependant, en déclenchant Page.Validate(), la page est rechargée et le captcha est affiché. Sur cette base, je me suis dit que j'essaierais une approche différente et que j'appellerais Page.Validate() dans l'événement de chargement de page pour que le captcha apparaisse au début. Cela a presque fonctionné: le captcha est apparu sur le chargement de la première page, mais quand un email invalide est soumis avec une réponse captcha correcte, le captcha disparaît quand la page est rechargée, mais bien sûr, l'email ne peut pas être envoyé.

Comment est-ce que je peux forcer le captcha à être rendu quand la page est frappée initialement, ou, empêcher le captcha d'être soumis quand une adresse email invalide est entrée?

Répondre

1

Eh bien, ce n'est pas joli, mais j'ai réussi à le faire fonctionner.

Depuis en utilisant la balise RecaptchaValidator ne fonctionnait pas la façon dont je le voulais, j'utiliser l'API AJAX recaptcha (http://recaptcha.net/apidocs/captcha/client.html) pour intégrer le widget sur la page thusly:

$(document).ready(function() { 
    Recaptcha.create("<public key>", 
     "ReCaptcha", { 
     theme: "clean", 
     callback: Recaptcha.focus_response_field 
    }); 
}); 

Ensuite, puisque tous les les données doivent être validées avec les serveurs recaptcha (challenge, publickey, etc. plus d'infos ici: http://recaptcha.net/apidocs/captcha/) dans le POST, j'ai instancié un nouveau RecaptchaValidator, défini les propriétés restantes, et appelé la méthode pour valider la réponse de l'utilisateur.

protected void Submit_Click(object sender, System.EventArgs e) 
{ 
    RecaptchaValidator RecaptchaValidator1 = new RecaptchaValidator(); 
    RecaptchaValidator1.Page = this; 
    RecaptchaValidator1.PrivateKey = "<private key>"; 
    RecaptchaValidator1.PublicKey = "<public key>"; 

    bool CaptchaPassed = RecaptchaValidator1.ValidateUserResponse(); 

    if (CaptchaPassed) 
    {  
     //hide the captcha, do some stuff 
    }  
} 

Certes un peu hacky, mais il a fait le travail. NOTE - Je l'ai mentionné dans la question, mais je le répète: le code côté serveur pour cela utilise l'ancien plug-in Recaptcha compatible .NET 1.1. Le lien vers le code du plug-in est dans la question. J'ai rep repectivement embarrassant, et ne peux plus utiliser d'hyperliens>. <

Questions connexes