Magento客户注册'蜂蜜罐'验证码
问题描述:
我以为我有这个排序,但我遇到了一个障碍。我想在客户注册表中添加一个“蜂蜜罐”,因为那些不熟悉的技巧涉及到使用CSS隐藏文本输入,并假定一般的机器人将要填充它。然而,人类不会看到该领域,所以它需要验证为空。Magento客户注册'蜂蜜罐'验证码
在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>
我,然后加入一点点额外的验证功能来检查该字段为空。这一切都正确,据我所知,但line 278
在AccountController.php
extractData()
丢弃输入字段从请求中的发布数据。我对Magento仍然很陌生,所以希望能在这里学到一些东西,但是如何防止extractData()
被剥离出来?
猜猜我只想知道我错过了什么,我已经在网上阅读了一些关于添加自定义字段的文章,据我所知这应该是工作,但也许我已经错过了一些东西我没有包含实体设置,因为我不需要在数据库中保存这个字段,它纯粹是为了验证注册来自人(尽可能)。
感谢您的任何帮助,我敢肯定这可能是我错过了一些荒谬的事情。
编辑:感谢@戈登 - knoppe指针上使用事件:在3210
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;
}
}
有了这个:
<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_*
)之前注册一个观察者以检测您的表单字段是否已填充,如果是,则将其重定向以阻止永久处理本机操作请求。
我已编辑我的帖子,以反映我的实验,而不是使用事件。它的工作原理虽然我确实有一点与重定向的争斗,所以有可能有更好的/更清洁的方式来做到这一点。感谢您的指示:) – createdbypete 2012-04-19 11:08:52