zend-framework2 - Zend 框架 2 : How to properly replace Figlet with reCaptcha on zfcUser

标签 zend-framework2 recaptcha zfcuser

我正在尝试在 zfcUser 注册表单上用 reCaptcha 替换 Figlet。可以在 https://github.com/ZF-Commons/ZfcUser#changing-registration-captcha-element 上找到有关如何完成此操作的部分说明。但不存在完整的指令。

检查 README.md 文件有一个关于如何完成此操作的两步说明,但 CAPTCHA 在表单上呈现时仍然使用 Figlet。

有没有人成功地实现了这一点?我真的需要这个。

提前致谢。

编辑:这是我开发的一个行之有效的解决方案:

1. 添加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. 进入你项目的ZF2安装目录并执行这个命令:
php composer.phar update

3. 将 config/autoload/database.global.php 替换或创建为:
<?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:在你的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. 创建/替换 config/autoload/recaptcha.global.php 为:
<?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. 创建/替换 config/autoload/zfcuser.global.php 为:
<?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. 导航至http://yourdomain.com/user

8.享受! :)

最佳答案

我就是这样做的,它可能不是最好或正确的方法,但它对我有用:

将 recaptcha 服务添加到您的 composer.json文件:

"require": {
    "Zendframework/zendservice-recaptcha": "2.*"
}

运行 composer 获取服务。然后您需要指定 ReCaptcha 配置。
我创建了一个单独的配置文件来存储 ReCaptcha key :

//zfcuser.local.php
return array(
    'zfcuser' => array(
        'form_captcha_options' => array(
            'options' => array(
                'privkey' => RECAPTCHA_PRIVATE_KEY,   
                'pubkey'  => RECAPTCHA_PUBLIC_KEY,
            ),
        ),
    ),
); 

然后ZfcUser验证码配置看起来像这样,告诉它使用 ReCaptcha 服务:

//zfcuser.global.php
'form_captcha_options' => array(
    'class'   => 'Zend\Captcha\ReCaptcha',
    'options' => array(
        'wordLen'    => 6,
        'expiration' => 300,
        'timeout'    => 300,
     ),
),

编辑:

您不需要 recaptcha.global.php .您可以随意调用配置文件,只要它以 .global.php 或 .local.php 结尾即可。您通常会为事物命名 .local.php当您不希望它们在版本控制中时。

在这种情况下,我将文件命名为 zfcuser.local.php,因为它所做的只是存储 ReCaptcha key ,而我不希望它们在版本控制中。

启动应用程序时,所有配置文件都会合并到一个数组中。所以基本上,忽略 ZfcUser文档。或者也许其他人可以解释如何让它以这种方式工作。

第三个代码块是 zfcuser.global.php。

关于zend-framework2 - Zend 框架 2 : How to properly replace Figlet with reCaptcha on zfcUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683900/

相关文章:

php - ZF2是基于MOVE的吗?

php - 使用 zfcuser 和自定义模块选择字段

memcached - 在 Zend Framework 2 中使用 Memcached 设置 ttl 和命名空间

php - ZF2 - 如何插入选择?

javascript - 如何通过 javascript 检测重新验证码站点 key 是否有效?

rest - 将验证码 token 放在 REST API 中的最佳位置在哪里

php - 使用 ZfcUser 对 Controller 进行简单的 ZF2 单元测试

orm - 登录时 BjyAuthorize 未检测到任何角色

zend-framework2 - Zend 导航和 RBAC

ruby-on-rails - reCAPTCHA - 使用 Devise 和 Recaptcha gem 验证 SSL 证书失败错误