CAPTCHAの導入方法 -KCAPTCHAの導入-

公開日: : 最終更新日:2014/04/20 CakePHP, IT, PHP


CakePHP(1.2、1.3)に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[記述追加]

 参考サイト

※上記ソースコードは、以下の参考サイトに載っているソースコードを参考にしつつ修正しています。

  1. CAPTCHA機能付けました
  2. Integrate CakePHP with Kcaptcha

 おまけ

CakePHP用の日本語対応CAPTCHAコンポーネントもあるようです。
cakephp用CAPTCHAコンポーネント(日本語対応)
こちらはMITライセンスです。

広告

関連記事

Jenkins + iPhoneアプリ(2) -ローカルリポジトリにあるデータからipaファイル生成-

* これまで - * 最終目標 -(開発者)git(リモートリポジトリ)にソースをコミット

記事を読む

mixisample

iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(1)-

* やりたいこと iPhoneアプリでmixiと連携し、mixiボイスなどに文字を投稿する。 ※

記事を読む

no image

カレログ騒動で考えたライフログのこと

今回、カレログというAndroidアプリが話題になり騒動になってます。 というわけで、ふとカレログ

記事を読む

githubを使っての開発(1) -実践github-flow-

今は開発でgithubを利用しています。 開発をおこなう上で、githubをどのように扱えば良いの

記事を読む

no image

CakePHP1.3でテストコード(1) -モデルのテスト-

CakePHP1.3ではSimpleTestを用いてテストコードを書きます。 ※CakePHP2系で

記事を読む

no image

Facebookがちょっとコワイ vol.1 -自分の情報をコントロールできない-

Facebookの最近の広がり方などを見ていて、少々不安を感じたので思ったことをつらつらと書いてみま

記事を読む

no image

Androidアプリ開発 -画像を加工してセピア色にしてみる-

* やりたいこと ギャラリーから選んだ画像を加工してセピア色にしたい * ソース ** 画像を取得

記事を読む

no image

Twitterでプロテクトをかけているユーザが投稿したステータスを取得する方法

* 前提 ID Twitterの各投稿にはIDが存在していています。 そのIDを元にステータス

記事を読む

no image

jQuery Mobileの初期設定 -jQuery Mobieを利用時にページ内リンクさせたい-

* 前提 jQuery Mobileを利用していて、以下のタグを使ってページ内遷移したいことがありま

記事を読む

no image

MySQLのバックアップ手順 -消えたら困るものはバックアップ-

そろそろデータが消えてもらったら困るぐらいになっていたのでバックアップをとることにしました。 とい

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑