comment tester Recaptcha avec jQuery Valider plugin
Je suis à l'aide de valider le plugin jquery et recaptcha pour un formulaire de contact et je woudld voudrais savoir comment puis-je vérifier si le code du captcha est correcte avant de la forme sont soumis sinon, envoyer un message d'erreur parce que le droit maintenant de valider tout, mais j'ai inséré un mauvais code du formulaire sont envoyées de toute façon. Voici mon code de la ty d'avance pour anyhelp
<script type="text/javascript">
var RecaptchaOptions = {
lang : 'en',
theme : 'custom',
custom_theme_widget: 'recaptcha_widget'
};
</script>
<form id="contact" method="post" action="#">
<fieldset>
<label for="name_contact">NAME</label>
<input type="text" class="input-xlarge" id="name_contact" name="name_contact" value="" placeholder="" minlength="2">
<label for="email_contact">EMAIL</label>
<input type="email" class="input-xlarge" id="email_contact" name="email_contact" value="" placeholder="">
<label for="telephone">CONTACT NUMBER</label>
<input type="tel" class="input-xlarge" id="telephone" name="telephone" placeholder="" value="" >
<label for="message">MESSAGE</label>
<textarea id="message" class="input-xlarge" name="message" placeholder="" rows="5"></textarea>
<div id="recaptcha_widget" style="display:none">
<div id="recaptcha_image"></div>
<div class="recaptcha_only_if_incorrect_sol" style="color:red">Incorrect please try again</div>
<span class="recaptcha_only_if_image">Enter the words above:</span>
<span class="recaptcha_only_if_audio">Enter the numbers you hear:</span>
<input type="text" id="recaptcha_response_field" name="recaptcha_response_field" />
<div><a href="javascript:Recaptcha.reload()">Get another CAPTCHA</a></div>
<div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')">Get an audio CAPTCHA</a></div>
<div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')">Get an image CAPTCHA</a></div>
<div><a href="javascript:Recaptcha.showhelp()">Help</a></div>
</div>
<script type="text/javascript"
src="http://www.google.com/recaptcha/api/challenge?k=6Lf8RN4SAAAAAKnllVnDw23UpBIuAIdTRFgN1kmX">
</script>
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=6Lf8RN4SAAAAAKnllVnDw23UpBIuAIdTRFgN1kmX" height="300" width="500" frameborder="0"></iframe><br>
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
<input type="hidden" name="recaptcha_response_field" value="manual_challenge">
</noscript>
<button type="submit" value="" id="" name="send" class="pull-right lightblue btn-primary">SUBMIT</button>
</fieldset>
</form>
<script type="text/javascript">
$(document).ready(function () {
$("#contact").validate({
rules: {
"name_contact": {
required: true,
minlength: 3
},
"email_contact":{
required: true
},
"message":{
required:true
},
"recaptcha_response_field":{
required:true
}
},
messages: {
"name_contact": {
required: "Please, enter a name"
},
"email_contact":{
required: "Enter a valid email"
},
"message":{
required: "Please provide a comment"
},
"recaptcha_response_field":{
required: "Captcha is required"
}
},
errorPlacement: function(error, element) {
error.insertBefore(element);
}
});
});
</script>
- Il est soumis de toute façon en raison de
value="manual_challenge"
dans lename="recaptcha_response_field"
d'entrée. L'intégration avec le captcha est possible, mais il est également spécifique au système de captcha. Veuillez construire un jsFiddle simulation de votre formulaire, y compris le captcha partie. - voici mon fichier jsfiddle.net/9XXHE
- Cela nécessite une solution complexe impliquant à la fois jQuery et votre script côté serveur. Ma réponse ci-dessous porte uniquement sur l'jQuery.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de solution simple uniquement à l'aide de JavaScript ou jQuery. Depuis que vous avez à comparer les Re-Captcha code à l'aide de l'API avec votre privé clé, pour une bonne sécurité, vous doit faire de ce processus avec certains serveurcode côté.
Utilisateur remplit le formulaire correctement à l'exception de Re-Captcha code.
Si Re-Captcha code est vide, normal
required
règle en jQuery Valider les déclencheurs manquantes "Captcha" message. L'utilisateur peut essayer de nouveau.Une Re-Captcha code d'entrée (à tort ou à raison), le formulaire est soumis à votre serveurcôté code via jQuery
ajax
dans lesubmitHandler
fonction de rappel.Votre serveurcôté code, PHP, Perl, que ce soit, puis utilise votre clé API pour vérifier les entrées Re-Captcha code contre la Re-Captcha code prévu par l'API.
Si Re-Captcha code est correct, votre serveurcode côté continue comme d'habitude, et renvoie un "succès" texte de réponse à votre jQuery
ajax
success
fonction de rappel.Si Re-Captcha code est incorrect, votre serveurcôté code seulement retour d'une "erreur" réponse de texte à votre jQuery
ajax
success
fonction de rappel, et le code côté serveur ne fait rien d'autre.Au sein de votre jQuery
ajax
success
fonction de rappel, lire le texte du message retourné par le serveur-côté code.Si le retour de message indique un succès, alors votre formulaire a déjà été soumis avec succès et vous pouvez rediriger, claire de la forme, faire une animation, imprimer un message, ne rien faire, ou que ce soit, etc.
Si le retour de message indique l'échec, de générer une nouvelle Re-Captcha code via JavaScript, afficher un message d'erreur, "incorrect Captcha entré", et l'utilisateur peut tout simplement essayer de nouveau.
C'est la façon dont j'ai fait le mien... vous aurez besoin de faire quelque chose de très semblable à la suivante.
Ajouter un
submitHandler
à votre.validate()
options et l'utilisationajax
de contrôle de la soumission du formulaire. C'est la seule façon vous pouvez interagir avec le Captcha et de contrôle de la soumission du formulaire.Vous aurez également besoin de modifier votre fonction côté serveur pour tester si le captcha est passé ou non, de faire la fonction appropriée, et de retourner le bon
ajax
message,msg
. Sans rien savoir à propos de votre code côté serveur, il est impossible de dire quelque chose de plus spécifique.(REMARQUE: toute solution est purement JavaScript/jQuery, sans modification de votre code côté serveur, est pas sécurisé. Captcha peut être facilement contourné et votre clé API est exposé au public.)
Ce qui suit est seulement un PERL exemple de la façon dont j'ai modifié mon code côté serveur qui était une Forme Mailer script. Vous devrez vous adapter votre code côté serveur dans certains de la même façon.
La sous-routine
check_captcha
est appelée lorsque le script s'exécute en premier.Rappelez-vous que ce code côté serveur doit retour un message indiquant que votre jQuery ramasse au sein de votre jQuery
ajax
success
rappel quemsg
ci-dessus. Dans mon exemple, si le message contient le mot "captcha", cela signifie que le code a été entré mauvais et les utilisateurs doivent entrer un nouveau code Captcha.submitHandler: function validateCaptcha(){
devrait êtresubmitHandler: function(form){
. Sinon, c'est impossible pour moi de résoudre vos problèmes de code côté serveur... cette partie est à vous. Je sais que mon posté réponse est de travailler pour moi. Également vérifier la valeur dehtml
en revenant de serveur avec unconsole.log(html);
function(form)
et mes questions sur le message provenant de votre serveur?