Est-ce que quelqu'un sait faire " Google ReCAPTCHA (v2) " être "requis" dans une form
?
Je veux dire aucune soumission de formulaire tant que recaptcha n'est pas renseigné?
J'utilise ParsleyJs dans mon formulaire, mais je n'ai pas trouvé le moyen de le faire fonctionner avec div
s ...
Vous devez utiliser l'appel de réponse de vérification reCaptcha. Quelque chose comme ceci: <script src='https://www.google.com/recaptcha/api.js?onload=reCaptchaCallback&render=explicit'></script>
var RC2KEY = 'sitekey',
doSubmit = false;
function reCaptchaVerify(response) {
if (response === document.querySelector('.g-recaptcha-response').value) {
doSubmit = true;
}
}
function reCaptchaExpired () {
/* do something when it expires */
}
function reCaptchaCallback () {
/* this must be in the global scope for google to get access */
grecaptcha.render('id', {
'sitekey': RC2KEY,
'callback': reCaptchaVerify,
'expired-callback': reCaptchaExpired
});
}
document.forms['form-name'].addEventListener('submit',function(e){
if (doSubmit) {
/* submit form or do something else */
}
})
Pour ParsleyJS, vous allez faire une petite solution de contournement:
1.Ajouter un champ de saisie masqué, avec data-parsley-required="true"
, value = ""
, comme ceci:
<input id="myField" data-parsley-errors-container="#errorContainer" data-parsley-required="true" value="" type="text" style="display:none;">
2.Ajouter un conteneur d'erreur (juste en dessous ou en dessous de votre g-recaptcha
div):
<span id='errorContainer'></span>
3.Ajouter cette fonction simple quelque part dans votre code js:
function recaptchaCallback() {
document.getElementById('myField').value = 'nonEmpty';
}
4.Ajouter l'attribut data-callback
avec la valeur de la fonction personnalisée:
<div class="g-recaptcha" data-sitekey="***" data-callback="recaptchaCallback"></div>
Créez une règle https://laravel.com/docs/5.7/validation#custom-validation-rules
Ensuite, utilisez-le dans votre contrôleur
// validation
$this->validate( $request, array(
'g_recaptcha_response' => ['required', 'string', new Captcha()]
));