Part of the EllisLab Network
   
1 of 2
1
reCAPTCHA helper and validation function (easy-to-use captcha)
Posted: 19 October 2008 12:36 PM   [ Ignore ]  
Grad Student
Rank
Total Posts:  51
Joined  07-13-2008

This is a widely used captcha implementation. It’s used at big sites like Facebook and CraigsList.

Steps to Use

1. Sign up for an access key at http://recaptcha.net/

2. Get recaptchalib.php from the zip archive located at http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest.

3. Rename recaptchalib.php to recaptcha_helper.php and put it in your helpers folder.

4. Add the following function to recaptcha_helper.php:

function recaptcha()
{
    $CI
=& get_instance();
    
$CI->config->load('recaptcha');
    
$public_key = $CI->config->item('recaptcha_public_key');
    
$message = isset($CI->validation->recaptcha_error)
             ?
$CI->validation->recaptcha_error : '';
    return
recaptcha_get_html($public_key, $message);
}

4. Add the following function to your MY_Validation class as seen below in the libraries folder. (If you don’t already have one a MY_Validation class, make one.)

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class
MY_Validation extends CI_Validation
{
    
    
function MY_Validation()
    
{
        parent
::CI_Validation();
    
}
    
    
function recaptcha_matches()
    
{
        $CI
=& get_instance();
        
$CI->config->load('recaptcha');
        
$public_key = $CI->config->item('recaptcha_public_key');
        
$private_key = $CI->config->item('recaptcha_private_key');
        
$response_field = $CI->input->post('recaptcha_response_field');
        
$challenge_field = $CI->input->post('recaptcha_challenge_field');
        
$response = recaptcha_check_answer($private_key,
                                           
$_SERVER['REMOTE_ADDR'],
                                           
$challenge_field,
                                           
$response_field);
        if (
$response->is_valid)
        
{
            
return TRUE;
        
}
        
else
        
{
            $CI
->validation->recaptcha_error = $response->error;
            
$CI->validation->set_message('recaptcha_matches', 'The %s is incorrect. Please try again.');
            return
FALSE;
        
}
    }
    
}

5. Create a recaptcha.php in your config folder and add your public and private keys (the ones you got from registering) as seen below:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['recaptcha_public_key'] = "...";
$config['recaptcha_private_key'] = "...";

Example usage in a controller:

public function register()
    
{
        $this
->load->library('validation');
        
$this->load->helper('recaptcha');
        
        
$rules['username'] = 'trim|required|unique[users.username]';
        
$rules['password'] = 'required|password|matches[password_confirm]';
        
$rules['password_confirm'] = 'required';
        
$rules['email'] = 'trim|required|valid_email|unique[users.email]';
        
$rules['recaptcha_challenge_field'] = 'required|recaptcha_matches';
        
        
$this->validation->set_rules($rules);
        
        
$fields['username'] = 'username';
        
$fields['password'] = 'password';
        
$fields['password_confirm'] = 'password confirmation';
        
$fields['email'] = 'email';
        
$fields['recaptcha_challenge_field'] = 'answer to the security question';
        
        
$this->validation->set_fields($fields);
        
        if (
$this->validation->run() == FALSE)
        
{
            $this
->load->view('user_registration');
        
}
        
else
        
{
            
echo 'Success!';
        
}
    }

In the view, you can create the captcha form element by echoing <?= recaptcha() ?>
I can package all of this into a zip file upon request.

Profile
 
 
Posted: 19 October 2008 01:36 PM   [ Ignore ]   [ # 1 ]  
Grad Student
Rank
Total Posts:  68
Joined  08-03-2007

Thanks a lot. Very cool. You can send me the zip in this email . Also i want to publish this things in my blog with refer you.

Keep up this good work.

Profile
 
 
Posted: 29 October 2008 12:07 AM   [ Ignore ]   [ # 2 ]  
Grad Student
Avatar
Rank
Total Posts:  44
Joined  08-17-2008

hi, i got this problem

This reCAPTCHA key isn't authorized for the given domain. More info

Do you know why and how to fix? I think it’s because reCAPTCHA system :-?

Note: i used public and private key both for subdomain and domain.

 Signature 

http://drimr.com

Profile
 
 
Posted: 30 October 2008 10:52 PM   [ Ignore ]   [ # 3 ]  
Grad Student
Rank
Total Posts:  51
Joined  07-13-2008
Berserk - 29 October 2008 12:07 AM

hi, i got this problem

This reCAPTCHA key isn't authorized for the given domain. More info

Do you know why and how to fix? I think it’s because reCAPTCHA system :-?

Note: i used public and private key both for subdomain and domain.

Have you been able to fix the problem? I’m not sure what the issue is.

Try to make sure your domain name matches and that you entered in your public / private keys in correctly into the config file.

Profile
 
 
Posted: 07 November 2008 04:19 AM   [ Ignore ]   [ # 4 ]  
Grad Student
Avatar
Rank
Total Posts:  44
Joined  08-17-2008

thanks, i tried with other domain and it works ! But look like their problem with subdomain.

 Signature 

http://drimr.com

Profile
 
 
Posted: 17 December 2008 11:19 PM   [ Ignore ]   [ # 5 ]  
Grad Student
Rank
Total Posts:  40
Joined  12-10-2008

this is what i’m looking for. Would you like to send me the zip file ? I’m a little bit confuse with the validation, form_validation, and the view .. so i need to look the whole file ... ohh, almost forgot .. you can send to

Profile
 
 
Posted: 18 December 2008 07:18 AM   [ Ignore ]   [ # 6 ]  
Grad Student
Rank
Total Posts:  51
Joined  07-13-2008

Hi PermanaJ, I wrote this helper for version 1.6 of CI. The current version of CI is now 1.7 which uses form_validation instead of validation.

Someone else modified it to work with version 1.7 and posted it here: http://codeigniter.com/forums/viewthread/96365/

Good luck!

Profile
 
 
Posted: 18 December 2008 07:24 AM   [ Ignore ]   [ # 7 ]  
Grad Student
Rank
Total Posts:  40
Joined  12-10-2008

Ohh .. im using 1.7 .. thank a lot for the information ...

but the code above work well with 1.7

Profile
 
 
Posted: 24 January 2009 09:34 AM   [ Ignore ]   [ # 8 ]  
Summer Student
Total Posts:  1
Joined  01-24-2009

Hi,
I am not a website admin, I am just trying to post a comment into a site that uses Capcha.
The Capcha works for everyone else, i.e. they can see an image and a field to enter what they see and are able to click sumbit, but not for me.

Instead, I get the same message “This reCAPTCHA key isn’t authorized for the given domain. More info”

I read the replies but don’t understand the cause of the problem, as I’m not very capcha savvy.. :(

can anyone help?

thank you smile

Profile
 
 
Posted: 02 July 2009 04:57 PM   [ Ignore ]   [ # 9 ]  
Grad Student
Rank
Total Posts:  56
Joined  03-19-2007

I’ve made changes to make this work in CI 1.7.x

First, rename MY_Validation.php to MY_Form_validation.php

then change the code to match this:

<?php
if (!defined('BASEPATH')) exit ('No direct script access allowed');

class
MY_Form_validation extends CI_Form_validation {

  
function MY_Form_validation() {
    parent
::CI_Form_validation();
  
}

  
function recaptcha_matches() {
    $CI
= & get_instance();
    
$CI->config->load('recaptcha');
    
$public_key = $CI->config->item('recaptcha_public_key');
    
$private_key = $CI->config->item('recaptcha_private_key');
    
$response_field = $CI->input->post('recaptcha_response_field');
    
$challenge_field = $CI->input->post('recaptcha_challenge_field');
    
$response = recaptcha_check_answer($private_key, $_SERVER['REMOTE_ADDR'], $challenge_field, $response_field);
    
    if (
$response->is_valid) {
      
return TRUE;
    
}
    
else {
      $this
->recaptcha_error = $response->error;
      
$this->set_message('recaptcha_matches', 'The %s is incorrect. Please try again.');
      return
FALSE;
    
}
  }

}

and thats it.
Your recapture should now work with the current form validation class.

Profile
 
 
Posted: 07 August 2009 05:38 AM   [ Ignore ]   [ # 10 ]  
Grad Student
Avatar
Rank
Total Posts:  58
Joined  08-05-2009
milka5000 - 24 January 2009 09:34 AM

Hi,
Instead, I get the same message “This reCAPTCHA key isn’t authorized for the given domain. More info”

Maybe you are using a key registered for specific domain name. If you want to use a key for multiple domain names you must create a new key that’s global. The global key can be used on multiple domain names smile

 Signature 

Personal Website:
http://www.ifadey.com

Flickr:
http://www.flickr.com/fadey86

Profile
 
 
   
1 of 2
1
 
Post Marker Legend
New Topic New posts Hot Topic Hot Topic with new posts New Poll New Poll Moved Topic Moved Topic Sticky Topic Sticky topic
Old Topic No new posts Hot Old Topic Hot Topic with no new posts Old Poll Old Poll Closed Topic Closed Topic Announcement Announcements
Theme
Change Theme
Visitor Statistics
The most visitors ever was 721, on January 06, 2010 09:38 AM
Total Registered Members: 115020 Total Logged-in Users: 61
Total Topics: 122454 Total Anonymous Users: 5
Total Replies: 647342 Total Guests: 508
Total Posts: 769796    
Members ( View Memberlist )