Логин клиента не работает в 1.9

42

Я только что сделал новую установку Magento 1.9.0.1, и я вижу очень странное поведение с формой входа в систему клиента.

В Chrome (версия 36) форма входа не работает. Я просто перенаправлен на страницу входа. Там нет сообщения об ошибке. Тем не менее, когда я открываю новое окно Incognito, я могу войти в систему очень хорошо. Думая, что это проблема с файлами cookie, я удалил все файлы cookie из браузера и попытался снова, и получил те же результаты. В обоих случаях я могу войти в админку без проблем.

Я также пробовал это в Firefox и Safari. Firefox Я видел, как происходило то же самое (но не всегда, и я мог это исправить, удаляя куки), и я не мог копировать в Safari.

У меня никогда не было проблем с этим в любой другой версии Magento. Есть ли какое-то фундаментальное изменение в том, как Magento обрабатывает куки в версии 1.9, и / или я могу что-то сделать, чтобы сделать это более стабильным?

Джош Пеннингтон
источник
Можете ли вы поделиться ссылкой и проверить пользователя / пройти
MTM
К сожалению, все это связано с VPN моей работы.
Джош Пеннингтон
Переустановите Chrome и проверьте.
Niloct
Те же результаты после переустановки.
Джош Пеннингтон
1
у меня когда-то была похожая проблема на клиентском сайте, проблема заключалась в том, что к сайту обращались без, wwwнапример, на abc.comнего перенаправили www.abc.com. В этом случае браузер устанавливал cookie-файлы для обоих, и входы в систему специально перестали работать, но если я вручную удаляю cookie, которые были без wwwвходов в систему, снова начинаю работать. Можете ли вы проверить, так ли это и с вами?
MTM

Ответы:

38

У меня такая же проблема....

Ответ в том, что ваша тема не содержит переменную с именем form_key .

Как сказано выше, я должен добавить:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

Вы добавляете это сразу после <ul class="form-list">

каждому из моих login.phtml файлов для темы.

У вас также могут быть проблемы с обновлением количества товаров в корзине

Здесь важность form_keys :

С начала времен бэкэнд Magento содержал ключ формы, который защищал от атак XSS [1]. В Magento 1.8 ключ формы вошел в веб-интерфейс практически по той же причине: для защиты от отправки формы с другого веб-сайта с помощью вашего браузера. злоумышленник может добавить данные в вашу корзину, когда вы находитесь на другой вкладке браузера, или даже выполнить заказ для вас. Это зависит от предсказуемых URL-адресов, потому что у сайта не будет доступа к фактическому HTML-содержимому на вкладке браузера, где вы ожидаете заказ Magento. Однако все, что отправлено в магазин Magento, отправит ваши куки и, следовательно, будет использовать ваш сеанс.

При добавлении уникального ключа к каждой форме или каждой ссылке, которая генерирует действие на сервере, URL-адрес или содержимое формы больше не будет предсказуемым. Ключ формы хранится в данных сеанса и проверяется при отправке на сервер. Если они не совпадают, вы получаете ошибку ключа формы, и действие не завершено.

BWalt
источник
3
Добавьте вышеупомянутый скрытый ввод «form_key» в расположенную форму: app / design / frontend / base / default / template / persistent / checkout / onepage / login.phtml
Flipmedia
5
Намного лучше будет использовать фрагмент кода, <?php echo $this->getBlockHtml('formkey'); ?>а не большой ввод.
Наварр
Вставьте это перед закрывающим тегом формы <? Php echo $ this-> getBlockHtml ('formkey'); ?>
Тахир Ясин
красиво, это сработало для меня. Большое спасибо, я проголосовал!
CodingMageSheen
Вау, я так долго искал>. <! Большое спасибо!
Keenora Fluffball
8

Это может быть:

cookie setting issue in Chrome browser

ИЛИ

Magento 1.9 использует form key validation at customer loggin and registerстраницу.

По Post actionэтому проверьте форму ключа using function _validateFormKey()у контроллера

form key issue: form key missing так что добавьте этот код в вашу форму

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />

ИЛИ

Cookie domain setting issue Перейти к настройке проверки правильная или нет

в Admin>System>configuration>General>Web>Session Cookie Management

Амит Бера
источник
1
Форма входа уже имеет поле form_key, и я установил Cookie-домен, и это также не исправило его.
Джош Пеннингтон
пожалуйста, удалите cookie из браузера или перейдите на accountcontroller.php и проверьте, работает ли (! $ this -> _ validateFormKey ()) {или нет
Amit Bera
Ключ формы проверяется правильно. На самом деле, похоже, что loginPostAction работает отлично.
Джош Пеннингтон
1
@AmitBera Должен ли я встретиться с тобой magento чат? У меня есть проблема с модулем пожеланий?
Бабочка
@AmitBera Я установил ключ, но он все еще не работает. Также в accountcontroller.php if (!$this->_validateFormKey()) {возвращает false, что означает, что Magento не может проверить предоставленный ключ. Любая идея, почему это происходит?
Arvind07
6

Поскольку проблема связана с файлами cookie, попробуйте увеличить срок службы файлов cookie до 86400 в разделе

Sytem -> Configuration -> Web -> Session and Cookie Management


Причиной может быть то, что по умолчанию время жизни cookie установлено на 3600 (1 час). Но если компьютерное время конечного пользователя опережает время сервера, файлы cookie не будут установлены для внешнего интерфейса Magento, а также для внутреннего интерфейса. Например, время компьютера конечного пользователя на 1 час больше времени сервера, что означает, что срок действия файла cookie (содержащего идентификатор сеанса пользователя) истечет, как только пользователь войдет в систему или попытается добавить элемент.

Аншу Мишра
источник
4

Для будущих читателей: Есть много возможных причин этой проблемы. Во время входа в систему некоторые журналы исключений по соображениям безопасности подавляются, поэтому ваша проблема не будет отображаться var/log/exception.log.

Для диагностики вашей проблемы:

  1. Откройте app/code/core/Mage/Customer/controllers/AccountController.phpи перейдите к loginPostActionметоду.
  2. Временно раскомментируйте Mage::logException($e);звонок и сохраните изменения
  3. Попробуйте снова войти в систему с внешнего интерфейса, чтобы вызвать то же исключение.
  4. Посмотрите на последние ошибки в журнале исключений и изучите их.
  5. Повторяйте два предыдущих шага, пока не будет выброшено больше исключений.

Не забудьте отменить изменения app/code/core/Mage/Customer/controllers/AccountController.php!

Причиной моей проблемы был сбой автозагрузки класса, потому что модуль (неправильно) имел <codePool>community</codePool>вместо <codePool>local</codePool>.

WALF
источник
Я попробовал ваше решение, но не создается файл исключения.log, хотя я не могу войти!
Джон
4

Я исправил проблему, просто добавив приведенную ниже строку кода в phtml-файл постоянного входа.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
Виная Сикарвар
источник
1
Спасибо за решение. Я потратил почти полдня на это. И наконец нашел это решение.
Гаурав Агравал
3

Хорошо, после полчаса я выяснил, в каких именно папках login.phtml я должен измениться. Так что иди в

/app/design/frontend/default/template-name/template/persistent/customer/form/

и вставить

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

после

<ul class="form-list">

вот и все.

amyogiji
источник
3

Если вы используете кэш Varnish, может быть другая проблема. Я цитирую решение, которое я нашел в другом месте. https://github.com/nexcess/magento-turpentine/issues/169

И вот мы ... В последний раз, когда со мной случилась эта проблема с логином, я заметил, что у меня "есть" два разных куки с одинаковым именем. "Frontend". Все поля этих куки были идентичны, за исключением Поле «домен». В первом файле cookie значением домена было «mydomain.com», а во втором - «www.mydomain.com». Это происходит, когда пользователь еще не имеет файла cookie внешнего интерфейса и вводит «mydomain.com» в URL своего браузера. Это запускает неисправный «внешний интерфейс» cookie и портит все! На нашем сервере действует правило, что если веб-пользователь нажимает «mydomain.com», чтобы предоставить ему «www.mydomain.com». Это означает, что в браузере пользователя, в адресной строке URL-адрес превращается из «mydomain.com» на "www.mydomain.com". Я не уверен, что это как-то связано с проблемой входа в систему. Я просто упоминаю это. Решение: При настройке magento в параметрах кэширования скипидара есть опция «Нормализовать хост». Вы должны включить ее. Вот и все! После этого нет ничего грязного, нет двойного печенья! Надеюсь это поможет!

Хаим
источник
2

Причиной этой проблемы является то, что пользовательская форма входа в систему не содержит никаких ключей формы, и в loginPostAction Magento происходит проверка ключа формы.

Вы можете исправить это, как показано ниже:

  1. Перейдите в приложение / design / frontend / [Your-package] / [Your-theme] /template/customer/form/login.phtml

Найти:

и вставьте это сразу после кода выше:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Перейдите в app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml и примените те же изменения.
Jameslj
источник
1

Вышеописанное работало для меня абсолютно нормально, но я обновлял Magento 1.4.1 до 1.9.1, так что это был огромный скачок. Файлы нигде не были найдены в расположении выше, но были расположены в папке app / design / frontend / BASE.

/ Приложение / дизайн / интерфейс / BASE / по умолчанию / шаблон / устойчивый / клиент / форма /

Эта базовая папка содержит много общих файлов, начиная с Magento 1.4, поэтому я читаю ... Надеюсь, это сэкономит кому-то много часов работ, которые у меня заняли ...

Мэтью
источник
1

Если вы используете любое расширение для входа в систему, добавьте ключ формы в этот файл login.phtm.

Ятин Патель
источник
1
<input name = "form_key" type = "hidden" value = "<? php echo Mage :: getSingleton ('core / session') -> getFormKey ()?>" />
Ятин Пател
1

Убедитесь, что php-mbstring установлен и включен на вашем сервере.

Если это не так, логин администратора будет работать, а клиент - нет.

Эта проверка может быть выполнена путем просмотра выходных данных phpinfo()или путем временного включения исключения входа в систему вокруг строки 177в:app/code/core/Mage/Customer/controllers/AccountController.php

Имейте в виду, что операция может раскрыть пароль клиента в журнале трассировки исключений.

versedi
источник
0

У меня была такая же проблема, и я решил ее, удалив все куки. Кажется, проблема возникает, если у вас есть несколько разных магазинов magento и вы входите в них одновременно.

черный
источник