Recatpcha example
This is an advanced example how to use reCAPTCHA in registration. Make sure you already insert reCAPTCHA key in config file, if not the example wouldn't work.
Here is the controller part.
class Auth extends Controller
{
// Used for registering and changing password form validation
var $min_username = 4;
var $max_username = 20;
var $min_password = 6;
var $max_password = 10;
function Auth()
{
parent::Controller();
$this->load->library('Form_validation');
$this->load->library('DX_auth');
}
function index()
{
$this->login();
}
/* Callback function */
function username_check($username)
{
$result = $this->dx_auth->is_username_available($username);
if ( ! $result)
{
$this->form_validation->set_message('username_check', 'Username already exist. Please choose another username.');
}
return $result;
}
function email_check($email)
{
$result = $this->dx_auth->is_email_available($email);
if ( ! $result)
{
$this->form_validation->set_message('email_check', 'Email is already used by another user. Please choose another email address.');
}
return $result;
}
function recaptcha_check()
{
$result = $this->dx_auth->is_recaptcha_match();
if ( ! $result)
{
$this->form_validation->set_message('recaptcha_check', 'Your confirmation code does not match the one in the image. Try again.');
}
return $result;
}
/* End of Callback function */
function register_recaptcha()
{
if ( ! $this->dx_auth->is_logged_in() AND $this->dx_auth->allow_registration)
{
$val = $this->form_validation;
// Set form validation rules
$val->set_rules('username', 'Username', 'trim|required|xss_clean|min_length['.$this->min_username.']|max_length['.$this->max_username.']|callback_username_check|alpha_dash');
$val->set_rules('password', 'Password', 'trim|required|xss_clean|min_length['.$this->min_password.']|max_length['.$this->max_password.']|matches[confirm_password]');
$val->set_rules('confirm_password', 'Confirm Password', 'trim|required|xss_clean');
$val->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email|callback_email_check');
// Is registration using captcha
if ($this->dx_auth->captcha_registration)
{
// Set recaptcha rules.
// IMPORTANT: Do not change 'recaptcha_response_field' because it's used by reCAPTCHA API,
// This is because the limitation of reCAPTCHA, not DX Auth library
$val->set_rules('recaptcha_response_field', 'Confirmation Code', 'trim|xss_clean|required|callback_recaptcha_check');
}
// Run form validation and register user if it's pass the validation
if ($val->run() AND $this->dx_auth->register($val->set_value('username'), $val->set_value('password'), $val->set_value('email')))
{
// Set success message accordingly
if ($this->dx_auth->email_activation)
{
$data['auth_message'] = 'You have successfully registered. Check your email address to activate your account.';
}
else
{
$data['auth_message'] = 'You have successfully registered. '.anchor(site_url($this->dx_auth->login_uri), 'Login');
}
// Load registration success page
$this->load->view($this->dx_auth->register_success_view, $data);
}
else
{
// Load registration page
$this->load->view('auth/register_recaptcha_form');
}
}
elseif ( ! $this->dx_auth->allow_registration)
{
$data['auth_message'] = 'Registration has been disabled.';
$this->load->view($this->dx_auth->register_disabled_view, $data);
}
else
{
$data['auth_message'] = 'You have to logout first, before registering.';
$this->load->view($this->dx_auth->logged_in_view, $data);
}
}
}
Here is the view part (auth/register_recaptcha_form).
<?php
$username = array(
'name' => 'username',
'id' => 'username',
'size' => 30,
'value' => set_value('username')
);
$password = array(
'name' => 'password',
'id' => 'password',
'size' => 30,
'value' => set_value('password')
);
$confirm_password = array(
'name' => 'confirm_password',
'id' => 'confirm_password',
'size' => 30,
'value' => set_value('confirm_password')
);
$email = array(
'name' => 'email',
'id' => 'email',
'maxlength' => 80,
'size' => 30,
'value' => set_value('email')
);
?>
<html>
<body>
<fieldset><legend>Register</legend>
<?php echo form_open($this->uri->uri_string())?>
<dl>
<dt><?php echo form_label('Username', $username['id']);?></dt>
<dd>
<?php echo form_input($username)?>
<?php echo form_error($username['name']); ?>
</dd>
<dt><?php echo form_label('Password', $password['id']);?></dt>
<dd>
<?php echo form_password($password)?>
<?php echo form_error($password['name']); ?>
</dd>
<dt><?php echo form_label('Confirm Password', $confirm_password['id']);?></dt>
<dd>
<?php echo form_password($confirm_password);?>
<?php echo form_error($confirm_password['name']); ?>
</dd>
<dt><?php echo form_label('Email Address', $email['id']);?></dt>
<dd>
<?php echo form_input($email);?>
<?php echo form_error($email['name']); ?>
</dd>
<?php if ($this->dx_auth->captcha_registration): ?>
<dt></dt>
<dd>
<?php
// Show recaptcha imgage
echo $this->dx_auth->get_recaptcha_image();
// Show reload captcha link
echo $this->dx_auth->get_recaptcha_reload_link();
// Show switch to image captcha or audio link
echo $this->dx_auth->get_recaptcha_switch_image_audio_link();
?>
</dd>
<dt><?php echo $this->dx_auth->get_recaptcha_label(); ?></dt>
<dd>
<?php echo $this->dx_auth->get_recaptcha_input(); ?>
<?php echo form_error('recaptcha_response_field'); ?>
</dd>
<?php
// Get recaptcha javascript and non javasript html
echo $this->dx_auth->get_recaptcha_html();
?>
<?php endif; ?>
<dt></dt>
<dd><?php echo form_submit('register','Register');?></dd>
</dl>
<?php echo form_close()?>
</fieldset>
</body>
</html>
You can find this example in controllers/auth.php and views/auth/register_recaptcha_form.php that included in DX Auth library download.