reCAPTCHAのアカウント登録からCodeIgniterでの開発方法をまとめます。
動作するサンプルを最後のほうに記載しています。
reCAPTCHAとは
reCAPTCHAはGoogleが提供している無償のCAPTCHA(キャプチャ)サービスです。
CAPTCHAとは、読みにくく加工した文字を表示してその文字をユーザーに入力してもらうことでWebサイトを利用しているユーザーが人間であるかどうかを判断する仕組みです。
掲示板やアカウント登録でスパムを防止したいときに便利です。
reCAPTCHAのアカウント登録
下記のURLからアカウント登録を行います。
「USE reCAPTCHA ON YOUR SITE」をクリックします。
「Sign up Now!」をクリックします。
Googleのアカウントでサインインします。
DomainへreCAPTCHAを利用するドメインを入力してCreate Keyをクリックします。
ここではブログのドメイン「iw3.me」を入力しています。
これでアカウントの登録は完了です。
作成されたPublic KyeとPrivate Keyは後で使います。
RECaptcha-for-Codeigniter
CodeIgniterからreCAPTCHAを利用するためのライブラリー(RECaptcha-for-Codeigniter)がGitHubに公開されていたのでこちらを利用しました。
下記のページの「ZIP」ボタンからzip形式でダウンロードできます。
解凍するとconfigとlibrariesフォルダにそれぞれphpファイルがあるので、CodeIgniterのapplicationフォルダ配下の同名のディレクトリに置きます。
application | ||
│ | ||
├ | config | |
│ | └ | recaptcha.php |
│ | ||
└ | libraries | |
└ | Recaptcha.php |
config/recaptcha.phpを設定
さきほどreCAPTCHAで作成したPublic KyeとPrivate Keyを設定します。
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /* * reCaptcha File Config * * File : recaptcha.php * Created : May 14, 2013 | 4:22:40 PM * * Author : Andi Irwandi Langgara <irwandi@ourbluecode.com> */ $config['public_key'] = '6Ldxq-ISAAAAAA6zPZ7bMOhOQhMmb-PVie53Ttnk'; $config['private_key'] = '6Ldxq-ISAAAAANDbfkESdFEKbuafUjpa8vCFw6Cb'; ?>
Controllerを作成
recaptcha_get_html()メソッドからreCAPTCHAを表示するスクリプトが取得できるので、そのままViewに渡しています。View側でこの内容を出力することでreCAPTCHAが表示されます。
submit()メソッドではrecaptcha_check_answer()メソッドでユーザーの入力値を渡して、getIsValid()メソッドで入力が正しいかどうか判断しています。
※ 通常recaptchaライブラリーを使用する前に「$this->load->library(‘recaptcha’)」として読み込む必要がありますが、このソースコードではControllerに宣言しているライブラリー名をMY_Controllerが取得して読み込み処理を行なっています。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class RecaptchaLogin extends MY_Controller { // ------------------------------------------------------------------------ // インスタンス変数 // ------------------------------------------------------------------------ /** * ヘルパー * @var array */ protected $helpers = array( 'form', 'url', ); /** * ライブラリー * @var array */ protected $librarys = array( 'recaptcha', ); // ------------------------------------------------------------------------ // コンストラクター // ------------------------------------------------------------------------ /** * コンストラクター */ public function __construct() { parent::__construct(); } // ------------------------------------------------------------------------ // 公開メソッド // ------------------------------------------------------------------------ /** * index */ public function index() { $data['recaptcha_html'] = $this->recaptcha->recaptcha_get_html(); $this->load->view('v_recaptchaLogin', $data); } /** * submit */ public function submit() { $remoteAddr = $_SERVER['REMOTE_ADDR']; $challenge = $this->input->post('recaptcha_challenge_field'); $response = $this->input->post('recaptcha_response_field'); $this->recaptcha->recaptcha_check_answer($remoteAddr, $challenge, $response); if ($this->recaptcha->getIsValid()) { $this->session->set_flashdata('msg','成功!'); } else { $this->session->set_flashdata('msg','失敗。'); } redirect('2013/recaptchaLogin'); } } /* End of file recaptchaLogin.php */ /* Location: ./application/controllers/recaptchaLogin.php */
Viewを作成
Controllerから提供された$recaptcha_htmlをそのまま出力します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>reCAPTCHA for CodeIgniter</title> </head> <body> <?php echo form_open('2013/recaptchaLogin/submit'); ?> <?php echo $recaptcha_html; ?> <?php echo form_submit('submit', '認証'); ?> <?php echo form_close(); ?> <?php echo $this->session->flashdata('msg'); ?> </body> </html>
reCAPTCHAのサンプル
CodeIgniterのバージョン
1.7.2と2.0.3で動作することが確認できています。
コメント