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' => 'キャプチャに誤りがあります。',
]);