LaravelでreCAPTCHAを導入

Laravelでメールフォームを作る際にGoogle reCAPTCHAを利用したのでその手順のメモです。

ライブラリは noCAPTCHAを使いました。

環境

Laravel:Laravel 9.16

PHP:8.0.16

noCAPTCHA:13.0

Googleでキーの取得

Googleのサイトにアクセスし、キーを発行します。

発行されたキーはメモしておきます。
ドメインにはローカルでもテストするため、localhostも対象にしました。


ライブラリをインストール

composerを使ってインストールします。

sail composer require arcanedev/no-captcha

.envに以下を追加し、Googleで発行されたキーを設定します。

NOCAPTCHA_SITEKEY=xxxx
NOCAPTCHA_SECRET=xxxx

設定ファイルを作成します。

sail artisan vendor:publish --provider="Arcanedev\NoCaptcha\NoCaptchaServiceProvider"

config/no-captcha.phpを修正します。

変更点はversionをv2に、langを'jp'に変更するだけでした。

bladeの修正

{!! no_captcha()->display() !!} と{!! no_captcha()->script() !!}を追加します。

<div class="form-group">
 <div class="col-md-6 offset-md-4">
   {!! no_captcha()->display() !!} 
    </div>
</div>
<button type="submit" class="btn btn-primary">メール送信</button>
</form> 
{!! no_captcha()->script() !!}

画面にreCAPTCHAが表示されるのを確認します。

バリデーション

コントローラーにバリデーションを追加します。

$request->validate([
       'g-recaptcha-response' => ['required', new \Arcanedev\NoCaptcha\Rules\CaptchaRule]
     ], [
       'g-recaptcha-response.required' => 'チェックボックスにチェックをして下さい。',
       'g-recaptcha-response.captcha' => 'キャプチャに誤りがあります。',
 ]);

Laravelの投稿一覧