以前、WordPressのプラグインでも紹介した、Googleが提供している人間とロボットのどちらによる操作かを判別するためのセキュリティ強化ツール、CAPTCHA認証機能をLaravelにパッケージを利用して導入する方法をご紹介します。
minory


WordPressのプラグインでGoogleのreCAPTCHA認証機能を追加 | minory
WordPressでは、デフォルトのログイン画面のURLが広く知れ渡っているため、スパム行為も多くなります。実際に、当サイトでも以前からスパム行為が頻発していました。今回紹…
keyを取得するなどの下準備は、上記の記事で完了しているものとして進めていきます。
目次
Google captcha for Laravelの使い方
こちらのLaravelのパッケージを利用すれば、とても簡単にCAPTCHA認証を導入することができます。
GitHub

GitHub – thinhbuzz/laravel-google-captcha: Google captcha for Laravel, support multiple captcha on p…
Google captcha for Laravel, support multiple captcha on page – thinhbuzz/laravel-google-captcha
パッケージのインストールと設定
まずは、いつものようにcomposerコマンドでインストールします。
composer require buzz/laravel-google-captcha
次に、以下をconfig/app.phpのprovidersに追加しますが、Laravel 5.5以降は不要です。
'BuzzLaravelGoogleCaptchaCaptchaServiceProvider',
そして、公開設定をするとconfig以下にcaptcha.phpの設定ファイルが作成されます。
php artisan vendor:publish --provider="BuzzLaravelGoogleCaptchaCaptchaServiceProvider"
作成されたconfig/captcha.phpを確認したらわかるように、.envファイルにGoogleで取得したキーを設定する必要があります。
CAPTCHA_SECRET=[secret-key]
CAPTCHA_SITEKEY=[site-key]
CAPTCHAをフォームに追加する
今回は例として、ログインフォームに追加してみました。
・・・
<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を使用する宣言を追加
use IlluminateHttpRequest;
そして、通常のログインバリデーションの最後CAPCHA用のバリデーションを追加します。
Laravel News


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
/**
* 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'
]);
}
以上で完了です。
その他にも会員登録やお問い合わせフォームなどでも活躍しそうですね!


コメント