2012-04-18 6 views
3

私はこれを選別していると思っていましたが、私はうんざりしていました。私は「ハニーポット」を顧客登録フォームに追加したいと思っています。これらの手法は、CSSを使用してテキスト入力を隠すことを含み、平均的なボットがそれを埋めることを前提としています。しかし人間はフィールドを見ないでしょう空であると検証する必要があります。私は新しいモジュールを作成したMagentoのではMagentoのお客様登録「ハニーポット」captcha

、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()

私が欠けていることを知りたいのですが、インターネット上でカスタムフィールドを追加することについてのいくつかの記事を読んでいます。私はこれがうまくいくはずですが、多分私はデータベースにこのフィールドを保存する必要はないため、エンティティの設定は含まれていませんでした。これは、登録が人間からのものであるかどうかを検証することです(可能な限り)。

何か助けていただきありがとうございます。私が逃したのはおそらく何かばかげたことでしょう。

EDIT:​​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; 
    } 
} 

:@ゴードン・knoppeポインタにイベントを使用して上のおかげ

<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> 

答えて

3

これがある可能性があり処理するより戸建方法該当するコントローラアクション(controller_action_predispatch_*)の前にオブザーバーを登録して、フォームフィールドにデータが入力されているかどうかを検出し、そうであれば、ネイティブアクションが処理されないようにリダイレクトします要求を送信する。

+0

私は上記の投稿を編集して、代わりにイベントを使用した実験を反映しました。私はリダイレクトと少し戦っていましたが、それを行うためのより良い/よりクリーンな方法が潜在的にあります。あなたのポインタのおかげで:) – createdbypete

関連する問題