以前、WordPressのプラグインでも紹介した、Googleが提供している人間とロボットのどちらによる操作かを判別するためのセキュリティ強化ツール、CAPTCHA認証機能をLaravelにパッケージを利用して導入する方法をご紹介します。
WordPressのプラグインでGoogleのreCAPTCHA認証機能を追加 | minory
WordPressでは、デフォルトのログイン画面のURLが広く知れ渡っているため、スパム行為も多くなります。実際に、当サイトでも以前からスパム行為が頻発していました。今回紹…
key
を取得するなどの下準備は、上記の記事で完了しているものとして進めていきます。
目次
Google captcha for Laravelの使い方
こちらのLaravelのパッケージを利用すれば、とても簡単にCAPTCHA認証を導入することができます。
GitHub – thinhbuzz/laravel-google-captcha: Google captcha for Laravel 5, Laravel 6, Laravel 7, Larav…
Google captcha for Laravel 5, Laravel 6, Laravel 7, Laravel 8, Laravel 9 and Laravel 10, support multiple captcha on page – thinhbuzz/laravel-google-captcha
パッケージのインストールと設定
まずは、いつものようにcomposer
コマンドでインストールします。
1 |
composer require buzz/laravel-google-captcha |
次に、以下をconfig/app.php
のproviders
に追加しますが、Laravel 5.5以降は不要です。
1 |
'BuzzLaravelGoogleCaptchaCaptchaServiceProvider', |
そして、公開設定をするとconfig
以下にcaptcha.php
の設定ファイルが作成されます。
1 |
php artisan vendor:publish --provider="BuzzLaravelGoogleCaptchaCaptchaServiceProvider" |
作成されたconfig/captcha.php
を確認したらわかるように、.env
ファイルにGoogleで取得したキーを設定する必要があります。
1 2 |
CAPTCHA_SECRET=[secret-key] CAPTCHA_SITEKEY=[site-key] |
CAPTCHAをフォームに追加する
今回は例として、ログインフォームに追加してみました。
1 2 3 4 5 6 7 8 9 10 11 12 |
・・・ <div class="form-group{{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}"> <div class="col-md-6 col-md-offset-4"> {!! Captcha::display($attributes = [], $options = ['lang'=> app()->getLocale()]) !!} @if ($errors->has('g-recaptcha-response')) <span class="help-block"> <strong>{{ $errors->first('g-recaptcha-response') }}</strong> </span> @endif </div> </div> ・・・ |
Captcha::display()
の箇所以外は他の入力フォームと変わりませんね。
ビュー側(blade)で書くのはこれだけです。
カスタムログインバリデーション
CAPCHA用のバリデーションを追加しますので、validateLogin
メソッドを利用して
まずは、Request
を使用する宣言を追加
1 |
use IlluminateHttpRequest; |
そして、通常のログインバリデーションの最後CAPCHA用のバリデーションを追加します。
Learn how to change Laravel’s login validation – Laravel News
Laravel’s included auth system is a great way of scaffolding out a basic flow for authenticating users through a complete registration, login, logout, and forgo…
app/Http/Controllers/Auth/LoginController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * Validate the user login request. * * @param IlluminateHttpRequest $request * @return void */ protected function validateLogin(Request $request) { $this->validate($request, [ $this->username() => 'required|string', 'password' => 'required|string', 'g-recaptcha-response' => 'required|captcha' ]); } |
以上で完了です。
その他にも会員登録やお問い合わせフォームなどでも活躍しそうですね!
コメント