zend framework2 - Zend Framework 2: Cómo reemplazar correctamente Figlet con reCaptcha en zfcUser
zend-framework2 (1)
Estoy tratando de reemplazar a Figlet con reCaptcha en un formulario de registro de zfcUser. Se pueden encontrar instrucciones parciales sobre cómo lograr esto en https://github.com/ZF-Commons/ZfcUser#changing-registration-captcha-element pero no existe ninguna instrucción completa.
Comprobando que el archivo README.md tiene una instrucción de dos pasos sobre cómo lograr esto, pero aún el CAPTCHA usa Figlet cuando se representa en el formulario.
¿Alguien ha implementado esto con éxito? Realmente necesito una mano en este.
Gracias por adelantado.
EDITAR: Aquí hay una solución de trabajo probada que desarrollé:
1. Agregar a composer.json
// Add the lines below under the "require" element:
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": ">2.2.0rc1",
"zendframework/zendservice-recaptcha": "2.*"
}
2. Vaya al directorio de instalación de ZF2 de su proyecto y ejecute este comando:
php composer.phar update
3. Reemplace o cree config / autoload / database.global.php con:
<?php
$config = array(
''dbdriver'' => ''pdo'',
''dbhost'' => ''localhost'',
''dbport'' => ''3306'',
''dbname'' => ''CHANGEME'',
''dbuser'' => ''CHANGEME'',
''dbpass'' => ''CHANGEME'',
);
return array(
''service_manager'' => array(
''factories'' => array(
''Zend/Db/Adapter/Adapter'' => ''Zend/Db/Adapter/AdapterServiceFactory'',
),
),
''db'' => array(
''driver'' => ''pdo'',
''dsn'' => ''mysql:dbname=''.$config[''dbname''].'';host=''.$config[''dbhost''],
''username'' => $config[''dbuser''],
''password'' => $config[''dbpass''],
),
);
4: Ejecute esto en su servidor mySQL:
CREATE TABLE `user`
(
`user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(255) DEFAULT NULL UNIQUE,
`email` VARCHAR(255) DEFAULT NULL UNIQUE,
`display_name` VARCHAR(50) DEFAULT NULL,
`password` VARCHAR(128) NOT NULL,
`state` SMALLINT UNSIGNED
) ENGINE=InnoDB CHARSET="utf8";
5. Crea / Reemplaza config / autoload / recaptcha.global.php con:
<?php
define(''RECAPTCHA_PRIVATE_KEY'',''CHANGEME'');
define(''RECAPTCHA_PUBLIC_KEY'',''CHANGEME'');
return array(
''zfcuser'' => array(
''form_captcha_options'' => array(
''class'' => ''Zend/Captcha/ReCaptcha'',
''options'' => array(
''privkey'' => RECAPTCHA_PRIVATE_KEY,
''pubkey'' => RECAPTCHA_PUBLIC_KEY,
),
),
),
''di''=> array(
''instance''=>array(
''alias''=>array(
''recaptcha_element'' => ''Zend/Form/Element/Captcha'',
),
''ZfcUser/Form/Register'' => array(
''parameters'' => array(
''captcha_element''=>''recaptcha_element'',
),
),
),
),
);
6. Crea / Reemplaza config / autoload / zfcuser.global.php con:
<?php
$settings = array(
''enable_registration'' => true,
''enable_username'' => true,
''auth_adapters'' => array( 100 => ''ZfcUser/Authentication/Adapter/Db'' ),
''enable_display_name'' => false,
''auth_identity_fields'' => array( ''email'' ),
''use_registration_form_captcha'' => true,
''user_login_widget_view_template'' => ''zfc-user/user/login.phtml'',
);
return array(
''zfcuser'' => $settings,
''service_manager'' => array(
''aliases'' => array(
''zfcuser_zend_db_adapter'' => (isset($settings[''zend_db_adapter''])) ? $settings[''zend_db_adapter'']: ''Zend/Db/Adapter/Adapter'',
),
),
);
7. Navegue a http://tudominio.com/usuario
8. ¡Disfruta! :)
Así es como lo hice, podría no ser la mejor o la forma correcta, pero funcionó para mí:
Agregue el servicio recaptcha a su archivo composer.json
:
"require": {
"Zendframework/zendservice-recaptcha": "2.*"
}
Ejecuta el compositor para obtener el servicio. Luego debe especificar la configuración de ReCaptcha. Creé un archivo de configuración separado para almacenar las claves ReCaptcha:
//zfcuser.local.php
return array(
''zfcuser'' => array(
''form_captcha_options'' => array(
''options'' => array(
''privkey'' => RECAPTCHA_PRIVATE_KEY,
''pubkey'' => RECAPTCHA_PUBLIC_KEY,
),
),
),
);
Entonces la ZfcUser
captcha de ZfcUser
ve así, diciéndole que use el servicio ReCaptcha:
//zfcuser.global.php
''form_captcha_options'' => array(
''class'' => ''Zend/Captcha/ReCaptcha'',
''options'' => array(
''wordLen'' => 6,
''expiration'' => 300,
''timeout'' => 300,
),
),
Editar:
No necesita recaptcha.global.php
. Puede llamar al archivo config lo que quiera mientras termine con .global.php o .local.php. Por lo general, le .local.php
nombre a las cosas .local.php
cuando no las quiere en el control de versiones.
En este caso, denominé el archivo zfcuser.local.php porque todo lo que hace es almacenar las claves ReCaptcha y no las quería en el control de la versión.
Todos los archivos de configuración se fusionan en una matriz cuando se inicia la aplicación. Entonces, básicamente, ignore la documentación de ZfcUser
. O tal vez alguien más puede explicar cómo hacerlo funcionar de esa manera.
El tercer bloque de código es zfcuser.global.php.