Wie kann ich js einchecken, dass der Nutzer das Kontrollkästchen in Google Recaptcha aktiviert hat?


78

Ich habe vor dem Ende des Kopfes Folgendes hinzugefügt

<script src='https://www.google.com/recaptcha/api.js'></script>

Ich habe dies vor dem Ende des Formulars hinzugefügt

<div class="g-recaptcha" data-sitekey="== xxxxxx =="></div>

Ich kann das Recaptcha ähnlich wie https://developers.google.com/recaptcha/ sehen.

Wenn der Benutzer jedoch Daten drückt, ohne das Kontrollkästchen zu aktivieren, werden die Daten gesendet. Gibt es einen anderen Code, den ich hinzufügen muss, um zu überprüfen, ob der Benutzer das Kontrollkästchen aktiviert hat? Hoffentlich in js?



yeep .. kann nicht scheinen, um herauszufinden, wie dies funktioniert
Hallo Universum

Sie sollten dies auf Ihrem Backend-Server anfordern. Es wäre nicht sehr sicher für den Browser, dies alleine zu tun.
Daniel A. White

Das ist gut. Wie kann man das vom Frontend anfordern, vielleicht mit jquery?
Hallo Universum

Antworten:


186

Google hat eine Rückrufoption, wenn das Kontrollkästchen aktiviert ist.

Fügen Sie dies Ihrem Formularelement hinzu:

data-callback="XXX"

Beispiel:

<div class="g-recaptcha" data-callback="recaptchaCallback" data-sitekey="== xxxxxx =="></div>

Und ein Deaktivierungsattribut für Ihre Senden-Schaltfläche.

Beispiel:

<button id="submitBtn" disabled>Submit</button>

Erstellen Sie dann eine Rückruffunktion und schreiben Sie den gewünschten Code.

Beispiel:

function recaptchaCallback() {
    $('#submitBtn').removeAttr('disabled');
};

1
@mohanenb: Es soll nur das Senden verhindern, es soll nicht wie üblich die Serverseite überprüfen.
Halfbit

2
Wie kann man ein Timeout-Problem lösen? Wenn jemand das reCaptcha überprüft und dann einige Minuten lang kein Formular sendet, läuft reCaptcha ab, aber der Benutzer kann das Formular weiterhin senden.!
Akshay Kapoor


4
Nur ein Kopf hoch, um die Funktion recaptchaCallback () außerhalb des Dokuments zu platzieren. Bereits so, dass sie vom Captcha-Steuerelement erreicht werden kann. Andernfalls wird der Fehler console.log wie "ReCAPTCHA konnte die vom Benutzer bereitgestellte Funktion nicht finden:" angezeigt.
ForTheWin

1
Diese Lösung lediglich eine Funktion aufruft , wenn das Captcha ist gelöst, aber bietet keine Funktion zu überprüfen , ob das Captcha wurde gelöst.
João Pimentel Ferreira

71

Sie können auch das zu überprüfende grecaptcha-Objekt aufrufen. grecaptcha.getResponse();ist leer, wenn nicht markiert, und hat den Bestätigungscode, wenn aktiviert.

grecaptcha.getResponse().length === 0 wenn nicht markiert

function isCaptchaChecked() {
  return grecaptcha && grecaptcha.getResponse().length !== 0;
}

if (isCaptchaChecked()) {
  // ...
}

Aber wie bekomme ich grecaptcha.getResponse ()?
Nitin Dhomse

Es wird geladen, sobald Sie Googles Recaptcha laden. Teil des Pakets
Olafur Tryggvason

Ich habe versucht, aber nicht funktioniert, Konsole Debug sagt >> "Uncaught ReferenceError: grecaptcha ist nicht definiert"
silvachathura

Skript sollte zuerst recaptcha laden, versuchen, es asynchron oder mit setTimeout
Denys Klymenko

2
var isCaptchaChecked = (grecaptcha && grecaptcha.getResponse().length !== 0);
Jaybro

8

Um zu überprüfen, ob Google Recaptcha aktiviert ist oder nicht, können Sie dies mit dem folgenden Code tun:

<script>

if(grecaptcha && grecaptcha.getResponse().length > 0)
{
     //the recaptcha is checked
     // Do what you want here
     alert('Well, recaptcha is checked !');
}
else
{
    //The recaptcha is not cheched
    //You can display an error message here
    alert('Oops, you have to check the recaptcha !');
}

</script>

4

Um zu überprüfen, ob Google Recaptcha v2 aktiviert ist oder nicht, können Sie dies mit dem folgenden Code tun:

var checkCaptch = false;
     var verifyCallback = function(response) {
        if (response == "") {
             checkCaptch = false;
         }
         else {
             checkCaptch = true;
         }
     };
     $(document).ready(function() {
         $("#btnSubmit").click(function() {
             if (checkCaptch && grecaptcha.getResponse()!="") {
                  //Write your success code here
             }
         });
     })

3

Lassen Sie den Browser die Arbeit für Sie erledigen! (basierend auf der Antwort von slinky2000)

Hinweis: Dies dient nur dazu, das Senden einer "versehentlich" ungeprüften Wiederholung zu verhindern. Sie müssen das Recaptcha noch auf der Serverseite überprüfen, da es einem Bot egal ist ...

Fügen Sie ein unsichtbares Eingabe-Tag mit einem required=trueAttribut direkt unter dem hinzu div.g-recaptcha.

<input id='recaptcha_check_empty' required tabindex='-1',
style='width:50px; height:0; opacity:0; pointer-events:none; 
position:absolute; 
bottom:0;'>

Schließen Sie beide Breiten a divmit ein position=relative;, um das bottom:0;Obige auf den Boden von Recaptcha zu zeigen.

Jetzt bittet der Browser freundlich, dieses Feld auszufüllen und auf die Zusammenfassung zu zeigen.

Jetzt brauchen wir den Rückruf:

<div class="g-recaptcha" data-callback="recaptchaCallback" ...

und

function recaptchaCallback() { 
    $('#recaptcha_check_empty').val(1);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.