Edición de «Ejemplo de reCAPTCHA en KumbiaPHP v2»

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 4: Línea 4:
 
<span style="font-size:90%">Puedes tomar la información que aqui se encuentra pero no nos hacemos responsable</span>
 
<span style="font-size:90%">Puedes tomar la información que aqui se encuentra pero no nos hacemos responsable</span>
 
}}
 
}}
 
 
== Pasos previos ==
 
== Pasos previos ==
Este ejemplo es la evolución del [http://wiki.kumbiaphp.com/Ejemplo_de_reCAPTCHA_en_KumbiaPHP anterior tutorial sobre reCaptcha]. Se recomienda leer el tutorial anterior para entender el funcionamiento básico y posteriormente leer este.
+
Este ejemplo es la evolución del [http://wiki.kumbiaphp.com/Ejemplo_de_reCAPTCHA_en_KumbiaPHP anterior tutorial sobre reCaptcha]. Recomiendo encarecidamente leer primero el otro para entender el funcionamiento y posteriormente leer este.
  
 
Cosas que vamos a encontrar distintas:  
 
Cosas que vamos a encontrar distintas:  
 
* Se ha creado una librería para abstraer las funciones de generar un captcha y para comprobar una contestación. Asi podremos usarla desde otros controladores.
 
* Se ha creado una librería para abstraer las funciones de generar un captcha y para comprobar una contestación. Asi podremos usarla desde otros controladores.
* Se ha creado una segunda vista, en lugar de dejar un simple ''echo'' como hizo en el tutorial anterior.
+
* Se ha creado una segunda vista, en lugar de dejar un simple ''echo'' como hice en el tutorial anterior.
 +
 
  
 
== Pasos ==
 
== Pasos ==
Línea 20: Línea 20:
 
<source lang=php >
 
<source lang=php >
 
<?php  
 
<?php  
// Incluimos el fichero con la librería
+
// Incluimos el fichero con la libreria
 
require_once APP_PATH. '/libs/recaptchalib.php';
 
require_once APP_PATH. '/libs/recaptchalib.php';
/**
+
 
* Clase para consumir el servicio anti-spam reCaptcha
 
* @author Soukron
 
*/
 
 
class reCaptcha
 
class reCaptcha
 
{
 
{
    /**
+
private static $_publicKey  = "6LePF7oSAAAAALYNEfbbOfRAc9lCz3LKvoKcQkwZ";
    * Clave Publica reCaptcha
+
private static $_privateKey = "6LePF7oSAAAAADRQBaACf7imDRSwq-kPXyZOCBCA";
    * @var string
+
 
    */
+
public static function html($error = NULL)
    private static $_publicKey  = 'TU_CLAVE_PUBLICA';
+
{
    /**
+
return recaptcha_get_html(self::$_publicKey, $error);
    * Clave Privada reCaptcha
+
}
    */
 
    private static $_privateKey = 'TU_CLAVE_PRIVADA';  
 
    /**
 
    * Errores del reCaptcha
 
    */
 
    private static $_error = NULL;  
 
  
    /**
+
public static function validate()
    * Genera el HTML con el código reCaptcha
+
{
    *
+
$ret = recaptcha_check_answer (self::$_privateKey,
    * @return string
+
$_SERVER['REMOTE_ADDR'],
    */
+
$_POST['recaptcha_challenge_field'],
    public static function html()
+
$_POST['recaptcha_response_field']);
    {
+
 
        return recaptcha_get_html(self::$_publicKey, self::$_error);
+
return $ret;
    }
+
}
    /**
 
    * Valida que el código colocado sea el correcto
 
    * @return boolean
 
    */
 
    public static function isValid()
 
    {
 
        $ret = recaptcha_check_answer (self::$_privateKey,
 
                $_SERVER['REMOTE_ADDR'],
 
                $_POST['recaptcha_challenge_field'],
 
                $_POST['recaptcha_response_field']);
 
        if ( $ret->is_valid ){
 
            return TRUE;
 
        }else{
 
            self::$_error = $ret->error;
 
            return FALSE;
 
        }
 
    }
 
 
}
 
}
 
</source>
 
</source>
Línea 76: Línea 50:
 
<?php
 
<?php
 
Load::Lib("recaptcha");
 
Load::Lib("recaptcha");
class CaptchaController extends AppController
+
class CaptchaController extends ApplicationController
 
{
 
{
 
         public function index()
 
         public function index()
 
         {               
 
         {               
 
// Si vienen datos de formulario, los enviamos a la vista de nuevo
 
// Si vienen datos de formulario, los enviamos a la vista de nuevo
if (Input::hasPost('Datos')) $this->Datos = Input::post('Datos');
+
if ($this->has_post('Datos')) $this->Datos = $this->post('Datos');
  
 
// Comprobamos que se haya rellenado el reCAPTCHA
 
// Comprobamos que se haya rellenado el reCAPTCHA
                 if (Input::hasPost("recaptcha_response_field"))
+
                 if ($this->has_post("recaptcha_response_field"))
 
                 {
 
                 {
 
// Realizamos la comprobacion
 
// Realizamos la comprobacion
                         if (reCaptcha::isValid() {
+
                         $ret = reCaptcha::validate();
$this->Datos = Input::post('Datos');
+
                        if ($ret->is_valid) {
View::select("validado");
+
$this->Datos = $this->post('Datos');
 +
$this->render("validado");
 
}
 
}
 +
// Enviamos el error a la vista
 +
$this->previousError = $ret->error;
 
                 }
 
                 }
 
         }
 
         }
Línea 101: Línea 78:
 
<strong>Rellena el cuadro con tu nombre: </strong>
 
<strong>Rellena el cuadro con tu nombre: </strong>
 
<?php  
 
<?php  
echo Form::open();
+
echo form_tag('captcha/');
echo Form::text('Datos.nombre');
+
echo input_field_tag('Datos.nombre');
  
echo reCaptcha::html();
+
// Cargamos la librería y le pedimos un código html
 +
Load::Lib("recaptcha");
 +
echo reCaptcha::html($previousError);
  
echo Form::submit('Enviar datos');
+
echo submit_tag('Enviar datos');
 
 
        echo Form::close();
 
 
?>
 
?>
 
</source>
 
</source>
  
  
Y por último, para de paso mostrar el método ''View::select()'' de KumbiaPHP, creamos la vista que se mostrará en cuanto validemos correctamente el captcha.  
+
Y por último, para de paso mostrar el método ''render'' de KumbiaPHP, creamos la vista que se mostrará en cuanto validemos correctamente el captcha.  
 
 
 
La vista es ''app/views/captcha/validado.phtml'':
 
La vista es ''app/views/captcha/validado.phtml'':
 
<source lang=php>
 
<source lang=php>
Línea 120: Línea 96:
 
</source>
 
</source>
  
 
== Aplicando estilos ==
 
Para poder cambiar el css del captcha debemos agregar el siguiente código a nuestra app.
 
<source lang=javascript>
 
<script>
 
  var RecaptchaOptions = {
 
  theme : 'clean'  // [ red, white, blackglass, clean, custom ]
 
  };
 
</script>
 
</source>
 
A continuación agregar el siguiente código a nuestra app.
 
<source lang=css>
 
<style>
 
.recaptchatable .recaptcha_image_cell, #recaptcha_table
 
{
 
    background-color: #FFFFFF !important; /* reCaptcha widget background color */
 
}
 
#recaptcha_table
 
{
 
    border-color: #DFDFDF !important; /* reCaptcha widget border color */
 
}
 
#recaptcha_response_field
 
{
 
    border: 1px solid #CCCCCC !important; /* Text input field border color */
 
    background-color:#FFFFFF !important; /* Text input field background color */
 
}
 
</style>
 
</source>
 
Para mas información al respecto [http://wiki.recaptcha.net/ wiki de reCaptcha]
 
 
 
== Aplicando el cambio de idioma ==
 
Para poder cambiar el idioma del captcha podemos establecer el párametro lang utilizado en la API, de la siguiente manera.
 
<source lang=javascript>
 
<script>
 
var RecaptchaOptions = {
 
    lang: 'es'
 
};
 
</script>
 
</source>
 
Lo anterior traducira el captcha a español.
 
 
También podemos establecer nuestros propios textos a utilizar, agregando el siguiente codigo a nuestra app.
 
<source lang=javascript>
 
<script>
 
var RecaptchaOptions = {
 
    custom_translations : {
 
    instructions_visual :  'Escriba las dos palabras:',
 
    instructions_audio :  'Escribir lo que escucha:',
 
    play_again :          'Volver a reproducir el audio.',
 
    cant_hear_this :      'Descarga el audio en formato MP3.',
 
    visual_challenge :    'Modo Visual',
 
    audio_challenge :      'Escuchar la clave de seguridad.',
 
    refresh_btn :          'Volver a generar una clave de seguridad.',
 
    help_btn :            'Ayuda',
 
    incorrect_try_again :  'Incorrecto. Por favor, inténtelo de nuevo.'
 
},
 
    theme : 'clean'
 
};
 
</script>
 
</source>
 
  
 
== Prueba ==
 
== Prueba ==

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: