CodeIgniterでreCAPTCHAを使う方法

CodeIgniter
By: Vitor Lima

reCAPTCHAのアカウント登録からCodeIgniterでの開発方法をまとめます。
動作するサンプルを最後のほうに記載しています。

 

reCAPTCHAとは

reCAPTCHAはGoogleが提供している無償のCAPTCHA(キャプチャ)サービスです。
CAPTCHAとは、読みにくく加工した文字を表示してその文字をユーザーに入力してもらうことでWebサイトを利用しているユーザーが人間であるかどうかを判断する仕組みです。
掲示板やアカウント登録でスパムを防止したいときに便利です。

 

reCAPTCHAのアカウント登録

下記のURLからアカウント登録を行います。

reCAPTCHA
reCAPTCHA is a security service that protects your websites from fraud and abuse.

 

「USE reCAPTCHA ON YOUR SITE」をクリックします。

reCAPTCHA

 

「Sign up Now!」をクリックします。

reCAPTCHA

 

Googleのアカウントでサインインします。

reCAPTCHA

 

DomainへreCAPTCHAを利用するドメインを入力してCreate Keyをクリックします。
ここではブログのドメイン「iw3.me」を入力しています。

reCAPTCHA

 

これでアカウントの登録は完了です。
作成されたPublic KyeとPrivate Keyは後で使います。

reCAPTCHA

 

RECaptcha-for-Codeigniter

CodeIgniterからreCAPTCHAを利用するためのライブラリー(RECaptcha-for-Codeigniter)がGitHubに公開されていたのでこちらを利用しました。
下記のページの「ZIP」ボタンからzip形式でダウンロードできます。

GitHub - Cnordbo/RECaptcha-for-Codeigniter: Google RECaptcha v1 integration for Codeigniter (Obsolete for RECaptcha v2)
Google RECaptcha v1 integration for Codeigniter (Obsolete for RECaptcha v2) - Cnordbo/RECaptcha-for-Codeigniter

 

解凍すると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のサンプル

http://iw3.me/sample/2013/recaptchaLogin.html
Screenshot of iw3.me

 

CodeIgniterのバージョン

1.7.2と2.0.3で動作することが確認できています。

 

コメント

タイトルとURLをコピーしました