私はこれを選別していると思っていましたが、私はうんざりしていました。私は「ハニーポット」を顧客登録フォームに追加したいと思っています。これらの手法は、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 278
のAccountController.php
のextractData()
は、要求の投稿データからの入力フィールドを破棄します。私はまだ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>
私は上記の投稿を編集して、代わりにイベントを使用した実験を反映しました。私はリダイレクトと少し戦っていましたが、それを行うためのより良い/よりクリーンな方法が潜在的にあります。あなたのポインタのおかげで:) – createdbypete