Попытка добавить проверку XSRF в контактную форму
Я пытаюсь заблокировать недавний спамер формы "Свяжитесь с нами". Я решил, что лучший способ сделать это - добавить ключ формы и проверить его в контроллере.
Это работает, когда я изменяю основные файлы, что, очевидно, не является конечным решением,
Я прочитал несколько вопросов и учебных пособий по переопределению контроллера, и я попробовал их безрезультатно, основной контроллер всегда используется, и проверка никогда не происходит. Кто я такой поступаешь неправильно? (примечание: Я еще не создал модуль в Magento, это мой первый)
Вот что у меня есть:
Новый файл: app/code/local/ACS/Contacts/controllers/IndexController.php
Это копия основного файла app/code/core/Mage/Contacts/controllers/IndexController.php
с добавлением
if (!$this->_validateFormKey()) {
$error = true;
}
В блоке try
функции postAction()
.
2-й Новый файл: app/code/local/ACS/Contacts/etc/config.xml
Который выглядит так:
<?xml version="1.0"?>
<config>
<modules>
<acs_contacts>
<vesion>0.1.0</version>
</acs_contacts>
</modules>
<frontend>
<routers>
<contacts>
<args>
<modules>
<contacts before="Mage_Contacts">ACS_Contacts</contacts>
</modules>
</args>
</contacts>
</routers>
</frontend>
</config>
И, наконец, последний новый файл app/etc/modules/ACS_Contacts.xml
:
<?xml version="1.0"?>
<config>
<modules>
<ACS_Contacts>
<active>true</active>
<codePool>local</codePool>
</ACS_Contacts>
</modules>
</config>
И, конечно, я добавил ключ form_key в app/design/frontend/theme/template/contacts/form.phtml
2 answers
Сначала вам нужно исправить ваш файл app/code/local/ACS/Contacts/etc/config.xml
:
<?xml version="1.0"?>
<config>
<modules>
<ACS_Contacts>
<version>0.1.0</version>
</ACS_Contacts>
</modules>
<frontend>
<routers>
<contacts>
<args>
<modules>
<ACS_Contacts before="Mage_Contacts">ACS_Contacts</ACS_Contacts>
</modules>
</args>
</contacts>
</routers>
</frontend>
</config>
Тогда ваш app/etc/modules/ACS_Contacts.xml
нуждается в небольшом обновлении:
<?xml version="1.0"?>
<config>
<modules>
<ACS_Contacts>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Contacts/>
</depends>
</ACS_Contacts>
</modules>
</config>
Наконец, не просто копируйте app/code/core/Mage/Contacts/controllers/IndexController.php
в app/code/local/ACS/Contacts/controllers/IndexController.php
, заставьте свой новый контроллер расширить исходный контроллер и просто создайте свой собственный postAction
метод:
<?php
require_once 'Mage/Contacts/controllers/IndexController.php';
class ACS_Contacts_IndexController extends Mage_Contacts_IndexController
{
public function postAction()
{
// Here you can copy the original method and modify it to fit your needs
}
}
В config.xml файл
<acs_contacts>
<vesion>0.1.0</version>
</acs_contacts>
Изменено на:
<ACS_Contacts>
<vesion>0.1.0</version>
</ACS_Contacts>