По какой-то причине после отладки я заметил, что form_keys действительны только после того, как я очистил кеш, выполнив ручную rm -rf *
в папке var
, очистив кеш браузера и повторив попытку сайта.
Я не вносил никаких изменений в основной код, я сравнил его с оригинальной установкой 1.8.1, и они точно такие же.
Первоначальная проблема заключалась в том, что клиенты не могли войти в систему, потому что я использовал файл customer/persistent/login.phtml
из версии 1.7.0.2, и мне пришлось изменить его, чтобы добавить form_key
в качестве скрытого элемента ввода, используя метод, показанный во всех других сообщениях о новое добавление ключей формы в magento 1.8.1.
У меня была включена капча, и по какой-то причине, когда я зашел в логин клиента, капча не отображается.
Случайно, я не знаю, что я сделал, страница обновилась, и отобразилась капча, и я смог войти в панель управления, и это сработало. Затем я вышел из системы, и возникла та же проблема: клиент входит в систему с правильным именем пользователя/паролем, но перенаправляется на ту же страницу входа клиента.
Я отладил loginPostAction
в AccountController.php
из app/code/core/mage/customer/controllers
, и оказалось, что когда ключ формы действителен, после обновления кеша, очистки кеша в магии и браузере он достигает if( getIsJustConfirmed == true){ go to __welcomedashboard(..) }
, однако getIsJustConfirmed
возвращает null
или false
.
Я проверил, где установлен getIsJustConfirmed
, и он появляется в setCustomer
из Session.php
внутри app/code/core/mage/customer/Session.php
:
public function setCustomer(Mage_Customer_Model_Customer $customer)
{
// check if customer is not confirmed
if ($customer->isConfirmationRequired()) {
if ($customer->getConfirmation()) {
return $this->_logout();
}
}
$this->_customer = $customer;
$this->setId($customer->getId());
// save customer as confirmed, if it is not
if ((!$customer->isConfirmationRequired()) && $customer->getConfirmation()) {
$customer->setConfirmation(null)->save();
$customer->setIsJustConfirmed(true);
}
return $this;
}
первая часть !$customer->isConfirmationRequired()
всегда возвращает true
, однако $customer-->getConfirmation()
возвращает null
, поэтому не setIsJustConfirmed(true)
.