17

フォームの 1 つに reCAPTCHA v3 を統合しました。onload では、トークンが生成され、右下隅に google captcha のロゴが表示されます。しかし、フォームを送信すると、コンソールに「エラー: reCAPTCHA クライアントが存在しません」というエラーが表示されます。また、「g-recaptcha-response」でデータが取得されず、$_POST["g-recaptcha-response"] が空のままになっているようです。

サンプルコードは次のとおりです。

<script type="text/javascript">
    var ReCaptchaCallbackV3 = function() {
        grecaptcha.ready(function() {
            grecaptcha.execute("site_key").then(function(token) {
                console.log("v3 Token: " + token);
            });
        });
    };
</script>

<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=site_key"></script>

フォームが送信されたときに「g-recaptcha-response」は生成されません。

Google reCaptchaについてはよくわかりません。彼らが提供するドキュメントに従い、適切な方法でサイトと秘密鍵を使用しました。

どこに問題があり、可能な解決策は何か教えてください。

4

6 に答える 6

2

これは、ユーザーが Recaptcha 2 を操作する前に Recaptcha 2 でも発生します。そのため、recaptcha の値をチェックする JS 関数をトリガーする送信ボタンがあります。クライアントが存在しない問題を解決するために、次のことを行いました。

try {
   data["reCaptcha"] = grecaptcha.getResponse();
} catch (err) {
   data["reCaptcha"] = "";
}

データ オブジェクトは、recaptcha を検証するバックエンド スクリプトに送信されます。バックエンドは、フィールドが空であることもチェックします。

于 2019-04-23T09:39:29.010 に答える