首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2:如何在reCaptcha上正确地替换Figlet

2:如何在reCaptcha上正确地替换Figlet
EN

Stack Overflow用户
提问于 2013-05-22 05:11:21
回答 1查看 1.8K关注 0票数 4

我试图在reCaptcha注册表格中用zfcUser替换Figlet。关于如何实现这一点的部分指令可以在https://github.com/ZF-Commons/ZfcUser#changing-registration-captcha-element上找到,但不存在完整的指令。

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

有人成功地实现了这一点吗?这件事我真的需要帮忙。

提前谢谢。

编辑:下面是我开发的一个经过验证的工作解决方案:

1.添加到composer.json

代码语言:javascript
复制
// Add the lines below under the "require" element:
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.2.0rc1",
        "zendframework/zendservice-recaptcha": "2.*"

}

2.转到项目的ZF2安装目录并执行以下命令:

代码语言:javascript
复制
php composer.phar update

3.用:替换或创建config/autoload/database.global.php

代码语言:javascript
复制
<?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服务器上执行以下操作:

代码语言:javascript
复制
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.用:创建/替换配置/autoload/rettcha.global.php

代码语言:javascript
复制
<?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/zfcuer.global.php

代码语言:javascript
复制
<?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.享受!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-22 13:23:19

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

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

代码语言:javascript
复制
"require": {
    "Zendframework/zendservice-recaptcha": "2.*"
}

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

代码语言:javascript
复制
//zfcuser.local.php
return array(
    'zfcuser' => array(
        'form_captcha_options' => array(
            'options' => array(
                'privkey' => RECAPTCHA_PRIVATE_KEY,   
                'pubkey'  => RECAPTCHA_PUBLIC_KEY,
            ),
        ),
    ),
); 

然后ZfcUser captcha配置如下所示,告诉它使用ReCaptcha服务:

代码语言:javascript
复制
//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键,并且我不希望它们在版本控制中。

当应用程序启动时,所有配置文件都合并到一个数组中。因此,基本上,忽略ZfcUser文档。或者其他人可以解释怎么让它这样运作。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16683900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档