PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-Magento客户注册“蜜罐”验证码大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我以为我已经分类过了,但是遇到了麻烦.我想在客户注册表单上添加一个“蜜罐”,对于那些不熟悉此技术的人,需要使用CSS隐藏文本输入,并假设一般的bot都希望填写该文本.但是,人类不会看到该字段,因此需要验证为空.

在Magento中,我创建了一个新模块,将以下内容添加到config.xml中:

<global>
    <fieldsets>
        <customer_account>
            <honeytrap><create>1</create><update>1</update></honeytrap>
        </customer_account>
    </fieldsets>
    <models>
        <customer>
            <rewrite>
                <customer>MyStore_Honeytrap_Model_Customer</customer>
            </rewrite>
        </customer>
    </models>
</global>

然后,我向validate函数添加了一些额外内容,以检查该字段是否为空.据我所知,这一切都正确,但是在AccountController.PHP中的第278行处,extractData()丢弃了请求中的发布数据中的输入字段.我对Magento还是很陌生,因此也希望在这里学习一些东西,但是如何防止extractData()将字段从帖子中剥离出来?

猜猜我只是想知道我所缺少的,我已经在互联网上阅读了一些有关添加自定义字段的帖子,据我所知,这应该是可行的,但也许我错过了一些东西,因为我没有包括Entity设置,因为我不需要将此字段保存在数据库中,这纯粹是为了验证注册是否来自人类(尽可能多).

感谢您的帮助,我敢肯定我可能错过了一些荒谬的事情.

编辑:感谢@ gordon-knoppe指针使用事件:

public function check_trap(Varien_Event_Observer $observer)
{
    $event = $observer->getEvent();
    $post = $event->getControllerAction()->getrequest()->getPost();

    // check Honeytrap is empty
    if (Zend_Validate::is( trim($post['fname']) , 'NotEmpty')) 
    {
        $customerHelper = Mage::Helper('customer');
        $error = $customerHelper->__('A problem has occured with your registration.');
        Mage::getModel('customer/session')->addError($error);

        Mage::app()->getResponse()
            ->setRedirect(Mage::getUrl('customer/account', array('_secure' => truE)))
            ->sendResponse();
        exit;
    }
}

在config.xml中:

    <events>
        <controller_action_predispatch_customer_account_createpost>
            <observers>
                <mystore_honeytrap_observer>
                    <type>singleton</type>
                    <class>Mystore_Honeytrap_Model_Observer</class>
                    <method>check_trap</method>
                </mystore_honeytrap_observer>
            </observers>
        </controller_action_predispatch_customer_account_createpost>
    </events>

解决方法:

解决此问题的更独立的方法可能是在相关的控制器操作(controller_action_predispatch_ *)之前注册观察者,以检测您的表单字段是否已填充,如果是,则将其重定向出去,以防止本机操作处理请求.

大佬总结

以上是大佬教程为你收集整理的php-Magento客户注册“蜜罐”验证码全部内容,希望文章能够帮你解决php-Magento客户注册“蜜罐”验证码所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: