前提
- Laravel 5.4の利用方法が一通り分かっていること
- Laravel Collective を使ってFORMを実装済み
- 実装済みのFORMにreCAPTCHAを追加する
reCAPTCHAの準備
$ composer require anhskohbo/no-captcha
$ vi config/app.php
config/app.php
(前略)
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
(中略)
/*
* Forms & HTML
*/
Collective\Html\HtmlServiceProvider::class,
/*
* reCAPTCHA <= ここを追加
*/
Anhskohbo\NoCaptcha\NoCaptchaServiceProvider::class,
],
(後略)
reCAPTCHAのSECRETとSITE KEYの発行
以下のサイトにアクセスし、ドメインなどを登録。
https://www.google.com/recaptcha/admin#list
.envの修正
.env
NOCAPTCHA_SECRET={発行されたSECRET}
NOCAPTCHA_SITEKEY={発行されたSITE KEY}
viewの修正
適した場所に以下を挿入。自動的にreCAPTCHAのコードが展開されます。
foobar.blade.php
{!! app('captcha')->display()!!}
コントローラ(バリデーション)の修正
バリデーションルールとメッセージを追加します。
FoobarController.php
// ルール
$rules = [
'email' => 'required|email|max:255',
'g-recaptcha-response' => 'required|captcha',
];
// メッセージ
$messages = [
'email.required' => 'Eメールは必須です。',
'email.email' => 'Eメールの形式が正しくありません。',
'email.max' => 'Eメールは255文字以内で入力してください。',
'g-recaptcha-response.required' => '「私はロボットではありません」の左にチェックを入れてください。',
'g-recaptcha-response.captcha' => '「私はロボットではありません」のチェック結果が確認できませんでした。',
];
動作確認
- 画面表示して「私はロボットではありません」の文言が表示されていることを確認
- reCAPTCHAのチェックボックスをチェックせずに送信ボタンを押下しエラー表示を確認
- reCAPTCHAでわざと間違い送信に進めない事を確認
- reCAPTCHAを成功し送信、正しく登録できる事を確認