初心向け！Vue.jsでReCPTCHAを使ってボタンの制御を行おう！（V2）

今回は、GoogleReCPTCHAを使ってボタンの制御を行っていきます。

GoogleReCPTCHAってなに？って思うかもしれないんですけど、よく見る「ロボットではありません」的なやつです。

今回はV2を使用します。

V3は以下の記事に詳しく書いてあるので、V3を使いたい場合は以下の記事をご覧ください！

・[さて、驚くほど簡単にreCapthca認証でBOT、スパム対策を行おう！！（フロントエンド偏）](https://qiita.com/akki-memo/items/e3a1f23ccd988b3f4bfe)
・[さて、驚くほど簡単にreCapthca認証でBOT、スパム対策を行おう！！（バックエンド偏）](https://qiita.com/akki-memo/items/0ad78824af1b298948d5)

それでは一緒に説明を見ていきましょう！

#GoogleReCPTCHAの登録#

下記の記事を参考にGoogleReCPTCHAの登録を行ってください。

[Google reCAPTCHAのWEBサイト登録とAPIキーの取得方法](https://web.runland.co.jp/blog_cate2/post-3748)

途中V3かV2を選ぶところがあるので、そこではV2を選んでください。

#パッケージのインストール#

次に、V2用のパッケージのインストールを行います。

```
npm i --save vue-recaptcha
OR
yarn add vue-recaptcha
```

#ReCPTCHAの実装#

###スクリプトファイルの読み込み###

そしたら、実装していきます。

まず、スクリプトファイルを読み込んでいきます。

```
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
```

###リキャプチャキーの設定###

先ほど登録した画面からサイトキーをコピーして、環境変数として設定します。

環境変数は非常に便利なので、分からない方は下記の記事に詳しく説明しているのでぜひご覧ください。

[初心者必見！固定値（キー、URLなど）は.envファイルに書いて再利用しよう！！](https://qiita.com/akki-memo/items/c33348cfce315548ac6b)

```/.env
VUE_APP_RECAPTCHA_SITE_KEY_V2 = '6LeBtDIaAAAAAHidiiieieHuiiwuwen'
```

ローカルサーバーを立ち上げている人は一旦止めて、もう一度サーバーを立ち上げて下さい。

でないと環境変数の値が更新されません。

###コンポーネントの表示###

先ほどインストールしたパッケージをコンポーネントとして使っていきます。

```App.vue
<template>
  <div>
         <VueRecaptcha
            :sitekey="recaptchaKey"
            ref="recaptcha"
          ></VueRecaptcha>
  </div>
</template>

<script>
import VueRecaptcha from 'vue-recaptcha'
export default {
  components: {
    VueRecaptcha
  },
  data() {
    return {
      recaptchaKey: process.env.VUE_APP_RECAPTCHA_SITE_KEY_V2,
    }
  },
}
</script>
```

少しインデントはずれていますがご了承ください。

これで「ロボットではありません」を表示することができます。

ここからさらにボタンの制御を行っていきます。

###関数の設定###

最後に認証が通った時、通らなかった時の処理を行っていきます。

結論から言うと、認証が通った時は``@verify``、認証が通らなかった時は``@expired``としてイベントを発火することができます。

そして、認証が通ったとき、通らなかったときに分けてbuttonの``disabled``を操作していきます。

```App.vue
<template>
  <div>
         <VueRecaptcha
            :sitekey="recaptchaKey"
            @verify="onVerify"
            @expired="onExpired"
            ref="recaptcha"
          ></VueRecaptcha>
         <button :disabled="isDisabled">
          送信
        </button>
  </div>
</template>

<script>
import VueRecaptcha from 'vue-recaptcha'
export default {
  components: {
    VueRecaptcha
  },
  data() {
    return {
      isDisabled: true,
      recaptchaKey: process.env.VUE_APP_RECAPTCHA_SITE_KEY_V2,
    }
  },
  methods: {
    onVerify(response) {
      if(response !== '') {
        this.isDisabled = false
      } else {
        return false
      }
    },
    onExpired() {
      this.resetRecaptcha()
    },
    resetRecaptcha() {
      this.$refs.recaptcha.reset()
      this.isDisabled = true
    },
    }
  },
}
</script>
```

``this.$refs.recaptcha.reset()``で一度行った認証をリセットすることができます。

``onVerify``の引数の``response``は認証を行った際のトークンの値を取得しています。

``@verify``、``@expired``使うことでボタンの制御であったり、ページの制御を行うことができます。

いかがだったでしょうか？

V2はそこまで難しくはないと思います。

あらかじめパッケージが用意されているので。

ただ、V3は結構難しいので取り組む方はぜひ頑張ってください！

以上、「初心向け！Vue.jsでReCPTCHAを使ってボタンの制御を行おう！（V2）」でした！

良ければ、LGTM、コメントお願いします。

また、何か間違っていることがあればご指摘頂けると幸いです。

他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい！！

Thank you for reading