CAPTCHAの導入方法 -KCAPTCHAの導入-
CAPTCHAとは
CAPTCHAとは、ブログのコメントを書くところなどにある画像に書かれている文字と同じ文字を入力してもらい認証するものです。
詳しくは以下サイトを参照のこと。
CAPTCHA
導入するとして、1から全てを作るのは大変なのでライブラリを使うことにします
ライブラリをまとめてくれたサイトがあるので、そこから選びます。
PHPで使えるCAPTCHA画像作成ライブラリまとめ
今回は、上記サイトで推薦されている「KCAPTCHA」を利用することにします。
※KCAPTCHAは、LGPLライセンスです。
導入手順
導入の流れ
1. KCAPTCHAをダウンロード。
- ダウンロードには事前にアカウントが必要なので、ここで作成しておきます。
2. 解凍したら、「/app/vendors/」に設置。
- 「example.php」は使わないので削除します。
3. 「/app/controllers/components/」に「captcha.php」を設置。
- captcha.phpの中身は以下のソース。
<?php class CaptchaComponent extends Object{ function startup(&$controller){ $this->controller = $controller; } function render(){ App::import('Vendor','kcaptcha/kcaptcha'); $kcaptcha = new KCAPTCHA(); $this->controller->Session->write('captcha', $kcaptcha->getKeyString()); } }
4. 利用するcontrollerに以下のコードを追加。
- 赤文字の箇所が追加するところ。
※以下はサンプルとして、UsersControllerとしています。
<?php class UsersController extends AppController{ <span style="color:#FF0000;">var $components = array('Captcha');</span> <span style="color:#FF0000;">function captcha(){</span> <span style="color:#FF0000;">$this->Captcha->render();</span> <span style="color:#FF0000;">}</span> }
5. 利用するviewに以下のコードを追加。
- 表示されている文字を入力する箇所も用意します。
※参考サイト1.から乱数を付与。
<img src="<?php echo $html->url('/users/captcha?r='.rand()); ?>"><br/> <?php echo $form->input('inputWord',array('label'=>'上記画像の文字列を記入してください。'));?><br/>
6. 5のviewから送られてきたデータをチェックする関数を「Captcha.php」に用意。
※あくまでサンプルです。
function validateCaptcha($input){ $sessionCaptcha = $this->controller->Session->read('captcha'); if(empty($sessionCaptcha) || empty($input)){ return false; } if($input == $sessionCaptcha){ unset($sessionCaptcha); <del datetime="2010-02-07T10:07:27+09:00">return false;</del> return true; } return false; }
7. データを受け取る該当コントーラーで以下のようにチェックを追加。
if(!$this->Captcha->validateCaptha($input)){ //環境に併せて記述する。 //以下は、viewにエラー文字を表示させる場合です。 $this->User->invalidate('errorInputWord'); }
最終構成
最終的な構成は以下のようになっていると思います。
- /app
- /vendors
- /kcaptcha[追加]
- /controllers
- xxx_controller.php[記述追加]
- /components
- /Captcha.php[追加]
- /views
- /xxx.ctp[記述追加]
- /vendors
参考サイト
※上記ソースコードは、以下の参考サイトに載っているソースコードを参考にしつつ修正しています。
おまけ
CakePHP用の日本語対応CAPTCHAコンポーネントもあるようです。
cakephp用CAPTCHAコンポーネント(日本語対応)
こちらはMITライセンスです。
広告
関連記事
-
Jenkins + iPhoneアプリ(2) -ローカルリポジトリにあるデータからipaファイル生成-
* これまで - * 最終目標 -(開発者)git(リモートリポジトリ)にソースをコミット
-
iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(1)-
* やりたいこと iPhoneアプリでmixiと連携し、mixiボイスなどに文字を投稿する。 ※
-
カレログ騒動で考えたライフログのこと
今回、カレログというAndroidアプリが話題になり騒動になってます。 というわけで、ふとカレログ
-
githubを使っての開発(1) -実践github-flow-
今は開発でgithubを利用しています。 開発をおこなう上で、githubをどのように扱えば良いの
-
CakePHP1.3でテストコード(1) -モデルのテスト-
CakePHP1.3ではSimpleTestを用いてテストコードを書きます。 ※CakePHP2系で
-
Facebookがちょっとコワイ vol.1 -自分の情報をコントロールできない-
Facebookの最近の広がり方などを見ていて、少々不安を感じたので思ったことをつらつらと書いてみま
-
Androidアプリ開発 -画像を加工してセピア色にしてみる-
* やりたいこと ギャラリーから選んだ画像を加工してセピア色にしたい * ソース ** 画像を取得
-
Twitterでプロテクトをかけているユーザが投稿したステータスを取得する方法
* 前提 ID Twitterの各投稿にはIDが存在していています。 そのIDを元にステータス
-
jQuery Mobileの初期設定 -jQuery Mobieを利用時にページ内リンクさせたい-
* 前提 jQuery Mobileを利用していて、以下のタグを使ってページ内遷移したいことがありま
-
MySQLのバックアップ手順 -消えたら困るものはバックアップ-
そろそろデータが消えてもらったら困るぐらいになっていたのでバックアップをとることにしました。 とい