PHP
CakePHP
reCAPTCHA
cakephp3

[CakePHP3]見えないスパム防止のinvisible reCaptchaを実装

invisible reCaptchaは最新のGoogleのスパム防止システムです。
invisible reCaptchaを設置することで「ロボットではありません」などのチェックボックスを設置することなくスパム防止をすることが出来ます。

cakephp-invisible-recaptchaプラグインを使います。

セットアップ

recaptchaのAPIキー取得

こちらからinvisible recaptchaのAPIキーを取得します。

スクリーンショット 2018-01-04 12.37.47.png

Composerでインストール

composer require mosaxiv/cakephp-invisible-recaptcha

APIキーをセット

以下のAPIキーはテスト用のキーです

Configure::write('recaptcha', [
    'sitekey' => '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI',
    'secretkey' => '6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',
]);

Component読み込み

$this->loadComponent('InvisibleReCaptcha.InvisibleReCaptcha');

InvisibleReCaptchaの設置

Template

Form->create()Form->end()の間のどこかに$this->InvisibleReCaptcha->render()を記述します。

<?php
echo $this->Form->create();
echo $this->Form->control('email');
echo $this->Form->submit();
echo $this->InvisibleReCaptcha->render();
echo $this->Form->end();
?>

Controller

ReCaptchaのチェックをコントローラでします。

if ($this->InvisibleReCaptcha->verify()) {
}

認証をするときにclientIpでクライアントのIPを取得しているのでロードバランサなどを使っている場合は$this->request->trustProxy = true;とする必要があります。
詳しくはドキュメントをご確認ください。