サイトアイコン IT NEWS

LaravelのパッケージでフォームにCAPTCHA認証を追加する

laravel-google-captcha

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

keyを取得するなどの下準備は、上記の記事で完了しているものとして進めていきます。

Google captcha for Laravelの使い方

Google reCAPTCHA


こちらのLaravelパッケージを利用すれば、とても簡単にCAPTCHA認証を導入することができます。

パッケージのインストールと設定

まずは、いつものようにcomposerコマンドインストールします。

composer require buzz/laravel-google-captcha

次に、以下をconfig/app.phpprovidersに追加しますが、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用のバリデーションを追加します。

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'
    ]);
}

以上で完了です。
その他にも会員登録お問い合わせフォームなどでも活躍しそうですね!

モバイルバージョンを終了