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ライセンスです。

広告

関連記事

no image

iPhoneアプリ開発 -UIScrollViewで画像を拡大・縮小-

* やりたいこと UIScrollViewでピンチアウト・インして上に乗っている画像を拡大・縮小した

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(2) -記帳画面作成-

* 今までの流れ - * 画面構成 今回の芳名帳アプリは以下の画面で構成しています。 -

記事を読む

no image

github-flowを使っての開発(3) -1つのプロジェクトを複数人で開発-

今まで2回ほどgithub-flowをもとにした開発の流れを書きました。 今回は、複数人で開発をする

記事を読む

no image

ViewController単位で画面の向きを変えてみる

ViewController毎に画面の向きを変えたい!ということがあったのでやってみました。 *

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(4) -設定準備-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

no image

jQuery Mobileのバージョンアップではまった – pushStateの存在 –

jQuery Mobileをつかってスマートフォン対応をしたときにはまったこと。 * 前提

記事を読む

Jenkins + DeployGate(1) -DeployGateでAndroidアプリ開発-

TestFlight for Androidが発表されて1ヶ月ぐらいたちますが、音沙汰がありません。

記事を読む

no image

「Google Apps」無償版の新規登録が終了

以前、「Google Apps」を利用した以下の記事を書きましたが、とうとう無償版の新規登録が終了

記事を読む

no image

iPhoneアプリ開発 -スライドアウトするスプラッシュ画像-

* やりたいこと アプリを起動すると表示される画像(スプラッシュ画像)があります。 単に表示されるだ

記事を読む

no image

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

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

記事を読む

広告

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 ↑