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 278AccountController.phpextractData()丢弃输入字段从请求中的发布数据。我对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_*)之前注册一个观察者以检测您的表单字段是否已填充,如果是,则将其重定向以阻止永久处理本机操作请求。

+0

我已编辑我的帖子,以反映我的实验,而不是使用事件。它的工作原理虽然我确实有一点与重定向的争斗,所以有可能有更好的/更清洁的方式来做到这一点。感谢您的指示:) – createdbypete 2012-04-19 11:08:52