it-swarm.com.de

Antwort von Google reCaptcha "Nicht erfasst"

Ich verwende reCaptcha v2, aber in jedem Fall in der dev Console-Antwort Uncaught (in promise) null (und verschiebe die .reset()-Funktion). 

konsole:

 enter image description here

mein Code für Recaptcha:

<div class="text-xs-center" style="text-align: center; height:150px;">
    <p style="color: black;"> Complete the verification: </p>
    <div style="display: inline-block;" class="g-recaptcha" data-sitekey="xxxxxxxxxxx" data-callback="callback"></div>
</div>

meine Rückruffunktion:

function callback() {
    if (grecaptcha === undefined) {
        alert('Recaptcha non definito'); 
        return; 
    }

    var response = grecaptcha.getResponse();
    console.log(response);

    if (!response) {
        alert('Coud not get recaptcha response'); 
        return; 
    }

    $.ajax({
    'url' : 'validate-recaptcha.php',
    'type' : 'POST',
    'data' : {
        'response' : response   
    },
    'success' : function(data) {              
        alert('Data: '+data);
    },
    'error' : function(request,error)
    {
        alert("Request: "+JSON.stringify(request));
    }
    });
    grecaptcha.reset();
}

und meine validate-recaptcha.php:

<?php
//debug
$fp = fopen('debug.txt', 'a');
fwrite($fp, print_r($_POST, TRUE));
fclose($fp);
//enddebug

if (empty($_POST['recaptcha'])) {
    exit('Please set recaptcha variable');
}
// validate recaptcha
$response = $_POST['recaptcha'];
$post = http_build_query(
    array (
        'response' => $response,
        'secret' => 'yoursecretkey',
        'remoteip' => $_SERVER['REMOTE_ADDR']
    )
);
$opts = array('http' => 
    array (
        'method' => 'POST',
        'header' => 'application/x-www-form-urlencoded',
        'content' => $post
    )
);
$context = stream_context_create($opts);
$serverResponse = @file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context);
if (!$serverResponse) {
    exit('Failed to validate Recaptcha');
}
$result = json_decode($serverResponse);
if (!$result -> success) {
    exit('Invalid Recaptcha');
}
exit('Recaptcha Validated');

Bei der Suche im Internet ist das Problem wahrscheinlich die Funktion .reset(), aber ich verstehe die Lösung nicht.

11
FABBRj

Recaptcha v2 callback js error

Ich hatte auch diesen Fehler und fand, dass er mit dem Recaptcha-Callback zusammenhängt (in Ihrem Fall data-callback="callback"). Wenn Sie Ihr Datenrückrufattribut entfernen, wird der Fehler nicht angezeigt.

Der Konsolenfehler Uncaught (in promise) null zeigt an, dass der Rückruf auf ein Versprechen wartet. Hier ist eine grundlegende Rückruffunktion für Recaptcha mit Versprechen:

function callback() {
    return new Promise(function(resolve, reject) { 

    //Your code logic goes here

    //Instead of using 'return false', use reject()
    //Instead of using 'return' / 'return true', use resolve()
    resolve();

  }); //end promise
};

In Ihrem Fall müssen Sie Ihren Code folgendermaßen anpassen:

function callback() {
  return new Promise(function(resolve, reject) {  

    if (grecaptcha === undefined) {
        alert('Recaptcha non definito'); 
        //return;
        reject();
    }

    var response = grecaptcha.getResponse();
    console.log(response);

    if (!response) {
        alert('Coud not get recaptcha response'); 
        //return;
        reject();
    }

    $.ajax({
    'url' : 'validate-recaptcha.php',
    'type' : 'POST',
    'data' : {
        'response' : response   
    },
    'success' : function(data) {              
        alert('Data: '+data);
        resolve();
    },
    'error' : function(request,error)
    {
        alert("Request: "+JSON.stringify(request));
        reject();   
    }
    });
    grecaptcha.reset();

  }); //end promise
}

Dies ist meine erste Antwort in SO, also bitte seid geduldig und lasst mich wissen, wenn ich etwas vergessen oder verpasst habe :)

10
EsaulFarfan

@Christian Žagarskas wies in einem Kommentar darauf hin:

Turns out it also occurs when a site is not "registered" in the Google recaptcha/admin Domains area.

Ich habe diesen Fehler gemacht, als ich von einem Entwicklungsschlüssel zu einem Produktionsschlüssel gewechselt bin. Der Produktionsschlüssel hatte keine Einträge für localhost.

Ich habe die API-Antwort so konfiguriert, dass sie sich hinter einer Proxy-Umleitung befindet. Daher funktionierte die Überprüfung in einer Localhost-Umgebung, die nicht in der Google Admin-Konsole konfiguriert wurde und diesen allgemeinen Fehler verursachte.

Schritte zum Beheben des Fehlers, wenn Ihre Bestätigung hinter einer Proxy-Umleitung steht:

  1. Melden Sie sich in Ihrem Google-Konto an, in dem Ihre Recaptcha-Schlüssel registriert sind
  2. Tippen Sie in Google "Google Recpatcha Admin-Konsole"
  3. Gehen Sie zu Ihren Einstellungen für Ihren (Produktions-) Schlüssel
  4. Fügen Sie in "Domains" diese beiden Einträge hinzu:
localhost
127.0.0.1
  1. Speichern Sie es und testen Sie Ihr Recaptcha.
10

Ein weiterer Auslöser für diesen Fehler, der mich plagte, war, einen Button im Formular mit dem Namensattribut "Submit" zu haben. Bei Verwendung des automatischen Bindungsbeispielcodes aus der reCaptcha-Dokumentation wird dies zum Absturz gebracht, da 'form.submit' sich auf die Schaltfläche bezieht und nicht auf die Funktion submit () des Formulars. Doh!

<html>
  <head>
    <title>reCAPTCHA demo: Simple page</title>
     <script src="https://www.google.com/recaptcha/api.js" async defer></script>
     <script>
       function onSubmit(token) {
         document.getElementById("demo-form").submit();
       }
     </script>
  </head>
  <body>
    <form id='demo-form' action="?" method="POST">
      <!-- Oops.... avoid the name="submit" below -->
      <button name="submit" class="g-recaptcha" data-sitekey="your_site_key" data-callback='onSubmit'>Submit</button>
      <br/>
    </form>
  </body>
</html>
3
John Rix

In meinem Fall habe ich jquery.3.4.1.slim.js Verwendet, dann habe ich zu jquery.3.4.1.min.js Gewechselt und der Fehler ist verschwunden. Ich bin bei ASP.NET WebForms.

0
Santiago Trejo

Ähnlich wie bei John Rix Problem/Lösung. Ich habe auch den Fehler bekommen, als die ID des submit-Elements 'submit' war.

<!-- Avoid id="submit" below -->
<input type="submit" id="submit" value="submit">```
0
epluribusunum

In meinem Fall verwies mein Callback nur auf eine Variable, die nicht vorhanden war, und ich sah den gleichen Fehler. Sehr seltsamer Fehler für etwas so einfaches!

Ich habe den gleichen Fehler auch gesehen, als ich bei einem Unfall einen . hinter einem Variablennamen hinterlassen habe. Anscheinend ist dies ein generischer Fehler, der fix the code in your callback! bedeutet.

0
Trev14