LaravelでreCAPTCHAを導入してみる
2024.04.19 09:00
2024.04.18 12:10

Laravelのアプリにフォームの不正送信防止のためのreCAPTCHAを導入してみます。
環境は以下です。
- Laravel11
- PHP8.3
- google reCAPTCHA v3
ライブラリは「biscolab/laravel-recaptcha」を使ってみましょう。
また、試すにあたってこちらのサイトを参考にさせて頂きました。とてもわかりやすくて素晴らしいです。https://biz.addisteria.com/laravel_recaptcha_v3/
1. Google reCAPTCHAの登録
まずはGoogle AdminからreCAPTCHAを登録します。
登録したら発行されるシークレットキーとサイトキーが発行されるので、それを使います。
ちなみに開発用と本番用はそれぞれ別で作ったほうが良いみたいです。
2. Laravelのライブラリをインストール
次にライブラリをcomposerでインストール。
composer require biscolab/laravel-recaptcha
次に設定を出力します。
php artisan vendor:publish --provider="Biscolab\ReCaptcha\ReCaptchaServiceProvider"
「config/recaptcha.php」が出力されますので、その中にある「version」をv2からv3にします。
/**
*
* ReCATCHA version
* Supported: "v2", "invisible", "v3",
*
* get more info @ https://developers.google.com/recaptcha/docs/versions
*
*/
'version' => 'v3',
次に.envにKEYを追加します。
RECAPTCHA_SITE_KEY='XXXXXX'
RECAPTCHA_SECRET_KEY='XXXXX'
3. viewの設定
head部分にチェックのためのスクリプトを入れます。
読み込み順の関係で、ページ下部よりも上部のほうが良いみたいですね。
<script type="text/javascript">
function callbackThen(response)
{
response.json().then(function(data) {
if (!(data.success && data.score >= 0.6)) {
document.getElementById('ContactForm').addEventListener('submit', function(event) {
event.preventDefault();
alert('セキュリティ確認に失敗しました。ページを再読み込みして、もう一度送信ボタンをクリックしてください。');
});
}
});
}
function callbackCatch(error)
{
console.error('reCAPTCHA Error:', error);
alert('セキュリティチェック中に問題が発生しました。ページを再読み込みしてください。');
}
</script>
{!! htmlScriptTagJsApi([
'callback_then' => 'callbackThen',
'callback_catch' => 'callbackCatch',
]) !!}
ちなみに上記はフォームIDが「ContactForm」の場合ですので、そこは環境に合わせて。
これで送信を押した時にスコアが下回っていたら、エラーメッセージを吐いて止まります。
ボットは次に進めないというわけです。
今回は以上です!