google reCaptcha v3をインラインで設置しよう

どうもユーキです。

お問い合わせフォームを作ってたときにgoogle recaptcha v3を設置することになり、意外と手間だったので、備忘録として設置方法を残しておきます。

設置方法

早速ファイルから記載します。

htmlファイル

<!-- head内のjquery.min.jsの後に設置する -->
<script src="https://www.google.com/recaptcha/api.js?render=explicit&onload=onRecaptchaLoadCallback"></script><!-- 公式サイトだと?render=のあとはsitekeyになっているが上記の書き方にすることでコールバック関数を実行できます -->
<script>
// google reCAPTCHA onload
var clientId;
function onRecaptchaLoadCallback() {
  clientId = grecaptcha.render('inline-recaptcha', {
    'sitekey': 'XXXXXXXXXXXXXXXX', // 取得したサイトキーを入れる
    'badge': 'inline',
    'size': 'invisible'
  });

  grecaptcha.ready(function() {
    gRecaptcha();
  });
}

// google reCAPTCHA exec
function gRecaptcha() {
  grecaptcha.execute(clientId, {action: 'homepage'})
  .then(function(token) {
    // Verify the token on the server.
    var forms = document.getElementsByTagName( 'form' );

    for ( var i = 0; i < forms.length; i++ ) {
      var fields = forms[ i ].getElementsByTagName( 'input' );

      for ( var j = 0; j < fields.length; j++ ) {
        var field = fields[ j ];

        if ( 'g-recaptcha-response' === field.getAttribute( 'name' ) ) {
          field.setAttribute( 'value', token );
          break;
        }
      }
    }
  });
}
</script>

<!-- 以下をform内に設置する -->
<div class="formRow">
  <div id="inline-recaptcha"></div>
  <input type="hidden" value="" name="g-recaptcha-response">
</div>

上記を設定するだけです。
サイトキーの取得は、こちらから取得できます。(googleアカウントが必要になります)
https://www.google.com/recaptcha/admin#list

ちなみに、非同期で扱いたい場合は、ajaxを実行するたびに、gRecaptcha()を実行するときちんと動作します。

【2018/2/2追記】
WordPress用ですが我がビジネスパートナーである株式会社ウィズ・プランニングさんと共同でプラグインを作成してみました!
解説動画も作ってくださってますので、簡単に実装できるかと思います。
ぜひともご利用くださいませ!

ご利用はこちらから

About Me

プロフィール画像

ユーキと申します。北海道恵庭市という札幌と新千歳空港の間でフリーランスのWebエンジニアとして活動してます。

当サイトのブログでは、主にWeb制作全般、フリーランス周りの情報など色々なノウハウや知識を載せています。
その他日々気になったこと、思ったことも書いてます。

お仕事の相談など何かありましたら、お問い合わせかツイッターのDMからお気軽にご連絡くださいませ。

お問い合わせはこちら

ツイッターはこちら

ポートフォリオはこちら

Latest Posts

Popular Posts

TOP