Edición de «Ejemplo de reCAPTCHA en KumbiaPHP»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 3: Línea 3:
 
|texto ='''Este Artículo cumple con todos los quererimientos de los Kumbieros.'''<br />
 
|texto ='''Este Artículo cumple con todos los quererimientos de los Kumbieros.'''<br />
 
}}
 
}}
== Pasos previos ==
 
 
'''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 :)
 +
  
 
* 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.
  
* 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. Es '''importante''' que al solicitar la key, se indique que es ''global'', de lo contrario solo servirá si se usa desde el domínio usado. Explicación: Si en la generación de la key se indica el domínio ''midominio.com'', si intentamos usar el ejemplo desde un a web con URL ''http://localhost'' o desde ''http://otrodominio.com'', no funcionará.
+
 
 +
* 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.
 +
 
 +
 
 +
* Crea el fichero '''recaptcha.php''' en ''app/libs/'' con el siguiente contenido, sustituyendo '''X''' e '''Y''' por tus API Key obtenidas.
 +
<source lang=php >
 +
<?php
 +
include ("recaptchalib.php");
 +
$publickey  = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
 +
$privatekey = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
 +
?>
 +
</source>
  
  
== Pasos ==
+
* Ahora creamos un controlador para el captcha:
* Creamos un controlador, ''app/controllers/captcha_controller.php''. para el captcha:
 
 
<source lang=php >
 
<source lang=php >
 
<?php
 
<?php
 
// Incluimos el fichero con la libreria y nuestra API Key
 
// Incluimos el fichero con la libreria y nuestra API Key
require_once APP_PATH. '/libs/recaptchalib.php';
+
require_once APP_PATH. '/libs/recaptcha.php';
  
 
class CaptchaController extends ApplicationController {
 
class CaptchaController extends ApplicationController {
public $publickey  = "6LePF7oSAAAAALYNEfbbOfRAc9lCz3LKvoKcQkwZ";
 
public $privatekey = "6LePF7oSAAAAADRQBaACf7imDRSwq-kPXyZOCBCA";
 
  
 
public function index() {  
 
public function index() {  
 
// Generamos el reCAPTCHA
 
// Generamos el reCAPTCHA
$this->Captcha = recaptcha_get_html($this->publickey);
+
$this->Captcha = recaptcha_get_html($publickey);
 
}  
 
}  
  
 
public function comprobar() {
 
public function comprobar() {
 
// Comprobamos que se haya rellenado el reCAPTCHA
 
// Comprobamos que se haya rellenado el reCAPTCHA
if ($this->has_post("recaptcha_response_field")) {
+
if ($_POST["recaptcha_response_field"]) {
 
// Realizamos la comprobacion
 
// Realizamos la comprobacion
$resp = recaptcha_check_answer ($this->privatekey,
+
$resp = recaptcha_check_answer ($privatekey,
                $_SERVER['REMOTE_ADDR'],
+
                $_SERVER["REMOTE_ADDR"],
                $this->post('recaptcha_challenge_field'),
+
                $_POST["recaptcha_challenge_field"],
                $this->post('recaptcha_response_field'));
+
                $_POST["recaptcha_response_field"]);
  
 
if ($resp->is_valid) {
 
if ($resp->is_valid) {
 
// Aqui seguría nuestra comprobacion del resto de los  
 
// Aqui seguría nuestra comprobacion del resto de los  
 
// datos del formulario
 
// datos del formulario
$Datos = $this->post('Datos');
+
echo "You got it!"; die;
echo "Hi ".$Datos['nombre']."! You got it!"; die;;
 
 
} else {
 
} else {
 
// Capturamos el error para mostrarlo
 
// Capturamos el error para mostrarlo
Línea 51: Línea 58:
  
 
// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
 
// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
$this->Captcha = recaptcha_get_html($this->publickey, $error);
+
$this->Captcha = recaptcha_get_html($publickey, $error);
  
 
// Mostramos la misma vista que en el index
 
// Mostramos la misma vista que en el index
$this->render('index');
+
$this->render("index");
 
}
 
}
 
}
 
}
Línea 61: Línea 68:
  
  
* Por último, creamos la vista, ''app/views/captcha/index.phtml'':
+
* Por último, creamos la vista:
 +
 
 
<source lang=php >
 
<source lang=php >
<strong>Rellena el cuadro con tu nombre: </strong>
+
<b>Rellena el cuadro con tu nombre: </b>
 
<?php  
 
<?php  
 
echo form_tag('captcha/comprobar');
 
echo form_tag('captcha/comprobar');
echo input_field_tag('Datos.nombre');
+
echo input_field_tag('DatosForm.nombre');
 
echo $Captcha;
 
echo $Captcha;
 
echo submit_tag('Enviar datos');
 
echo submit_tag('Enviar datos');
Línea 73: Línea 81:
  
  
== Prueba ==
 
 
* Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://''<tuhost>''/captcha y probarlo.
 
* 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!
 
 
  
 
Saludos,
 
Saludos,

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: