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/"> |
コメント