アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームからのスパムが多く、自分でGoogle reCAPTCHAを設定してみようとサイトを参考にして、以下を</form>タグの後に記述しました。

ところがスパムの数は減らずGoogle cloudには「過去6週間にトークンをリクエストしていません」と出ます。
これは設定方法に問題があるという事だと思います。

<script src="https://www.google.com/recaptcha/api.js?render=6 …
<script>
var rc_form = document.getElementById('rc_form');
//フォーム要素にイベントハンドラを設定
rc_form.onsubmit = function(event) {
//デフォルトの動作(送信)を停止
event.preventDefault();
//トークンを取得
grecaptcha.ready(function() {
grecaptcha.execute('6LcdYmYkAAAAALxCMuxsHdGOXGidatwn27uI5R-o', {action: 'login'}).then(function(token) {
var token_input = document.createElement('input'); //input 要素を生成
token_input.type = 'hidden';
token_input.name = 'g-recaptcha-response';
token_input.value = token; //トークンを値に設定
rc_form.appendChild(token_input);
var action_input = document.createElement('input'); //input 要素を生成
action_input.type = 'hidden';
action_input.name = 'action';
action_input.value = 'login'; //アクション名を値に設定
rc_form.appendChild(action_input);
rc_form.submit(); //フォームを送信
});
});
}
</script>

どこに問題があるか、ご指導頂けないでしょうか?
ドメインの設定は大丈夫だと思われます。サイトに「Google reCAPTCHAで保護されています」のマークも付いています。

質問者からの補足コメント

  • ありがとうございます!
    サイトキーは確認しました。

    login部分を変更とは

    //トークンを取得
    grecaptcha.ready(function() {
    grecaptcha.execute('6LcdYmYkAAAAALxCMuxsHdGOXGidatwn27uI5R-o', {action: 'https://⚫︎⚫︎⚫︎⚫︎/'}).then(function(token) {
    var token_input = document.createElement('input');

    この部分だけで宜しかったでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/02/22 17:33
  • また、保護したいフォームのタグは

    <form method="post" action="mail.php" class="form-horizontal">

    この様になっていて、idが付いていないように思います。
    id=“rc_form” など加筆すれば大丈夫ですか?

    どうぞ宜しくお願いします。

      補足日時:2023/02/22 17:42
  • 少し見直しておりまして、、

    最後の方にある

    action_input.type = 'hidden';
    action_input.name = 'action';
    action_input.value = 'login';

    ↑こちらの'login'も、サイトURLに変更する必要があると言うことでしょうか?
    理解が遅くて大変申し訳ありません。

      補足日時:2023/02/22 17:56

A 回答 (1件)

問題がある可能性がある箇所を以下に示します。



reCAPTCHAのサイトキーが正しく設定されているかどうか確認してください。設定したサイトキーが間違っているとトークンが生成されません。設定したサイトキーが正しいかどうかは、Google reCAPTCHAのダッシュボードで確認できます。

JavaScriptコードの中にある{action: 'login'}のloginの部分を、フォームを保護したいページのURLに変更する必要があります。このアクション名をフォームを保護したいページのURLに合わせて変更しないと、トークンが正常に生成されません。

フォームのIDがrc_formであることを確認してください。もしIDが異なる場合、JavaScriptコードの中のgetElementByIdの引数も変更する必要があります。

以上の点を確認し、設定を見直してみてください。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2023/03/01 22:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!