Diferencia entre revisiones de «Ejemplo de reCAPTCHA en KumbiaPHP»

De KumbiaPHP Framework Wiki
(Corrijo un pequeño error, no sé como pude ponerlo así al princípio. No se "heredaban" las variables publickey y privatekey de recaptcha.php.)
(Corrijo otro fallo y agrego explicación!)
Línea 5: Línea 5:
 
'''Nota previa''' Este ejemplo esta sacado de la documentacion de reCAPTCHA y adaptado a un controlador/vista de KumbiaPHP de forma básica. Se puede mejorar creando un helper, pero queda fuera del ejemplo :)
 
'''Nota previa''' Este ejemplo esta sacado de la documentacion de reCAPTCHA y adaptado a un controlador/vista de KumbiaPHP de forma básica. Se puede mejorar creando un helper, pero queda fuera del ejemplo :)
  
 
+
== Pasos previos ==
 
* Descargar la libreria [http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest reCAPTCHA], descomprimela y copia el fichero '''recaptchalib.php''' en ''/app/libs'' de tu arbol de directorios de KumbiaPHP.
 
* Descargar la libreria [http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest reCAPTCHA], descomprimela y copia el fichero '''recaptchalib.php''' en ''/app/libs'' de tu arbol de directorios de KumbiaPHP.
  
Línea 11: Línea 11:
 
* Si no lo has hecho ya, [https://admin.recaptcha.net/accounts/signup/?next= registrate] y solicita una key de API en la web de reCAPTCHA.
 
* Si no lo has hecho ya, [https://admin.recaptcha.net/accounts/signup/?next= registrate] y solicita una key de API en la web de reCAPTCHA.
  
 
+
== Pasos ==
 
* Creamos un controlador para el captcha:
 
* Creamos un controlador para el captcha:
 
<source lang=php >
 
<source lang=php >
Línea 29: Línea 29:
 
public function comprobar() {
 
public function comprobar() {
 
// Comprobamos que se haya rellenado el reCAPTCHA
 
// Comprobamos que se haya rellenado el reCAPTCHA
if ($_POST["recaptcha_response_field"]) {
+
if ($this->has_post("recaptcha_response_field")) {
 
// Realizamos la comprobacion
 
// Realizamos la comprobacion
 
$resp = recaptcha_check_answer ($this->privatekey,
 
$resp = recaptcha_check_answer ($this->privatekey,
Línea 72: Línea 72:
 
</source>
 
</source>
  
 +
== Prueba ==
 +
* Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://''<tuhost>''/captcha y probarlo.
 +
 +
== Explicacion ==
 +
He metido los comentarios que creo necesarios, pero por si acaso, el funcionamiento es el siguiente:
 +
# Se carga la liberia, para tener las funciones disponibles. No usamos Load::Lib() porque KumbiaPHP espera que haya una clase definida, y no es el caso de la librería reCaptcha. Si en un futuro los desarrolladores de reCaptcha proporcionan una clase, lo haremos con Load::Lib(), pero el objetivo es usar la clase tal cual nos la den.
 +
 +
# Generamos en index() el HTML necesario, y lo mostramos en la vista.
 +
 +
# El formulario nos envia a comprobar(), la cual comprueba si hemos recibido una respuesta (vía POST) del formulario.
 +
 +
# De haberla recibido, pedimos al API de reCapcha que nos compruebe la respuesta, El resultado lo tenemos en ''is_valid'', y el mensaje de error (si lo hubiera) en ''error''.
 +
 +
# Si la respuesta es válida, hariamos un redirect(), un route(), o grabariamos una sesion, cookie, etc. para seguir con nuestra aplicación. En caso contrario seguimos la ejecución.
 +
 +
# Posteriomente, si tuvieramos más datos del formulario (nombre, apellidos, telefono, mail, etc), los volvemos a cargar para que la vista los tenga. Esto lo hago porque si se rellenan 10 datos, pero falla el captcha, que el usuario no tenga que volver a rellenar todo otra vez.
 +
 +
# Por último, generamos otro captcha para mostrarlo como siguiente prueba y llamamos a la misma vista, para no repetir.
 +
 +
Espero que esté claro!
  
* Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://''<tuhost>''/captcha y probarlo.
 
  
 
Saludos,
 
Saludos,

Revisión del 20:43 17 jun 2010

{{#if:Information icon4.png |}}

{{#if:

|}}


Nota previa Este ejemplo esta sacado de la documentacion de reCAPTCHA y adaptado a un controlador/vista de KumbiaPHP de forma básica. Se puede mejorar creando un helper, pero queda fuera del ejemplo :)

Pasos previos

  • Descargar la libreria reCAPTCHA, descomprimela y copia el fichero recaptchalib.php en /app/libs de tu arbol de directorios de KumbiaPHP.


  • Si no lo has hecho ya, registrate y solicita una key de API en la web de reCAPTCHA.

Pasos

  • Creamos un controlador para el captcha:
<?php
// Incluimos el fichero con la libreria y nuestra API Key
require_once APP_PATH. '/libs/recaptchalib.php';

class CaptchaController extends ApplicationController {
	public $publickey  = "6LePF7oSAAAAALYNEfbbOfRAc9lCz3LKvoKcQkwZ";
 	public $privatekey = "6LePF7oSAAAAADRQBaACf7imDRSwq-kPXyZOCBCA";

	public function index() { 
		// Generamos el reCAPTCHA
		$this->Captcha = recaptcha_get_html($this->publickey);
	} 

	public function comprobar() { 		
		// Comprobamos que se haya rellenado el reCAPTCHA
		if ($this->has_post("recaptcha_response_field")) {
			// Realizamos la comprobacion
			$resp = recaptcha_check_answer ($this->privatekey,
		                $_SERVER['REMOTE_ADDR'],
		                $this->post('recaptcha_challenge_field'),
		                $this->post('recaptcha_response_field'));

			if ($resp->is_valid) {
				// Aqui seguría nuestra comprobacion del resto de los 
				// datos del formulario
				echo "You got it!"; die;
			} else {
				// Capturamos el error para mostrarlo
				$error = $resp->error;
			}
		}

		// Si vienen datos de formulario, los enviamos a la vista de nuevo
		if ($this->has_post('Datos')) $this->Datos = $this->post('Datos');

		// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
		$this->Captcha = recaptcha_get_html($this->publickey, $error);

		// Mostramos la misma vista que en el index
		$this->render('index');
	}
}
?>


  • Por último, creamos la vista:
<strong>Rellena el cuadro con tu nombre: </strong>
<?php 
	echo form_tag('captcha/comprobar');
	echo input_field_tag('DatosForm.nombre');
	echo $Captcha;	
	echo submit_tag('Enviar datos');
?>

Prueba

  • Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://<tuhost>/captcha y probarlo.

Explicacion

He metido los comentarios que creo necesarios, pero por si acaso, el funcionamiento es el siguiente:

  1. Se carga la liberia, para tener las funciones disponibles. No usamos Load::Lib() porque KumbiaPHP espera que haya una clase definida, y no es el caso de la librería reCaptcha. Si en un futuro los desarrolladores de reCaptcha proporcionan una clase, lo haremos con Load::Lib(), pero el objetivo es usar la clase tal cual nos la den.
  1. Generamos en index() el HTML necesario, y lo mostramos en la vista.
  1. El formulario nos envia a comprobar(), la cual comprueba si hemos recibido una respuesta (vía POST) del formulario.
  1. De haberla recibido, pedimos al API de reCapcha que nos compruebe la respuesta, El resultado lo tenemos en is_valid, y el mensaje de error (si lo hubiera) en error.
  1. Si la respuesta es válida, hariamos un redirect(), un route(), o grabariamos una sesion, cookie, etc. para seguir con nuestra aplicación. En caso contrario seguimos la ejecución.
  1. Posteriomente, si tuvieramos más datos del formulario (nombre, apellidos, telefono, mail, etc), los volvemos a cargar para que la vista los tenga. Esto lo hago porque si se rellenan 10 datos, pero falla el captcha, que el usuario no tenga que volver a rellenar todo otra vez.
  1. Por último, generamos otro captcha para mostrarlo como siguiente prueba y llamamos a la misma vista, para no repetir.

Espero que esté claro!


Saludos, Soukron