凄く簡単に CakePHP で Securimage を使って画像認証 (captcha) を実装する方法

CakePHP で画像認証を実装するまでを以下のページを参考に実装したので要点を抑えてメモしておきます。

Securimage をダウンロードする

下記のサイトより Securimage をダウンロードします。

ライブラリを解凍したら丸ごと Vendors 配下に入れます。

Securimage を使うコンポーネントを作る

以下のようなコンポーネントを securimage.php という感じで作ります。ttf_file の場所に気をつけてください。環境によって変わると思います。

追記(2012/02/20): CakePHP 2.0 用に継承を Object を Component に、ttf_file ファイルの読み込みを ROOT 定数を使って読み込むように、Vendor の読み込みをファイル名指定に書き直しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class SecurimageComponent extends Component
{
    function startup(&$controller)
    {
        $this->controller = $controller;
    }
 
    function render()
    {
        App::import('Vendor', 'Securimage', array('file' => 'Securimage/securimage.php'));
        $securimage = new Securimage();
        $securimage->ttf_file = ROOT . '/vendors/Securimage/AHGBold.ttf';
        $securimage->charset = 'ABCDEFGHKLMNPRSTUVWYZ23456789';
        $securimage->image_width = 200;			// 175
		$securimage->image_height = 50; 		// 45
        $securimage->font_size = 45;
        $securimage->show();
    }
 
    function checkCaptcha($captcha)
    {
        App::import('Vendor','Securimage');
        $securimage = new Securimage();
 
        if ($securimage->check($captcha) === false) {
            return false;
        }
        return true;
    }
}

コントローラーを設定する

以下のようにコントローラーでコンポーネントを指定しつつ、captcha 画像を出すためのアクションを設定。URL からこのアクションにアクセスすると画像が表示されつつ、裏では SESSION に captcha に書いてある文字が入るという仕組みです。

1
2
3
4
5
6
7
8
9
10
11
12
13
class HogeController extends AppController
{
    public $components = array('Securimage');
 
    public function hoge()
    {
    }
 
    public function captcha()
    {
        $this->Securimage->render();
    }
}

ビューを設定する

img 要素の src 属性に先ほど作ったアクションの URL を入れます。画像を表示する度に SESSION にコードが入り、画像が変わります。そして input 要素を用意してユーザーにはそこに画像内の文字列を入力させて後で比較をします。

1
2
<?php echo $form->input('captcha', Array('label' => false, 'class' => 'captcha')); ?>
<img src="<?php echo URL; ?>/hoge/captcha/">

コメント

コメントは受け付けていません。