Вхід клієнта не працює в 1.9


42

Щойно я зробив нову установку Magento 1.9.0.1, і я бачу дуже дивну поведінку з формою входу до клієнта.

У Chrome (версія 36) форма входу не працює. Я щойно переспрямований на сторінку входу. Немає повідомлення про помилку Однак, коли я відкриваю нове вікно інкогніто, я можу ввійти в систему просто чудово. Думаючи, що це проблема з файлами cookie, я очистив усі файли cookie з браузера і спробував ще раз, і я отримав ті ж результати. В обох випадках я можу ввійти на панель адміністратора без жодних проблем.

Я також спробував це в Firefox та Safari. Firefox Я бачив би те саме, що відбувається (але не послідовно, і я міг би це виправити, очистивши файли cookie), і я не міг повторити в Safari.

У мене ніколи не було проблеми з цим в жодній іншій версії Magento. Чи є якась принципова зміна в тому, як Magento обробляє файли cookie у версії 1.9 та / чи є щось, що я можу зробити, щоб зробити це стабільнішим?


Ви можете поділитися посиланням та перевірити користувача / пройти
MTM

На жаль, це все пов'язано за VPN моєї роботи.
Джош Пеннінгтон

Перевстановіть Chrome і перевірте.
Нілокт

Ті ж результати після перевстановлення.
Джош Пеннінгтон

1
Я колись мав подібну проблему на сайті клієнтів, проблема була в тому випадку, коли до нього звертався доступ, wwwнаприклад, abc.comтоді він був переспрямований www.abc.com. У цьому випадку браузер встановлював файли cookie для обох, і логіни спеціально перестали працювати, але якщо я вручну wwwвидаляю файли cookie, які були без логінів, знову почне працювати. Чи можете ви перевірити, чи те ж саме і у вас?
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 Backkend містився ключ форми, який захищав від атак XSS [1]. З Magento 1.8 клавіша форми увійшла в інтерфейс майже з тієї ж причини: захистити від подання форми з іншого веб-сайту за допомогою браузера. зловмисник може додати речі у свій кошик, перебуваючи на іншій вкладці браузера, або навіть виконати замовлення для вас. Це покладається на передбачувані URL-адреси, оскільки сайт не матиме доступу до фактичного вмісту HTML на вкладці браузера, де вас чекає замовлення Magento. Все, що надсилається до магазину Magento, однак надасть ваші файли cookie та таким чином використає ваш сеанс.

Додаючи унікальний ключ до кожної форми або до кожного посилання, що генерує дію на сервері, URL-адреса або вміст форми стає вже не передбачуваним. Ключ форми зберігається в даних сеансу і перевіряється після подання на сервер. Якщо вони не збігаються, ви отримуєте помилку ключа форми і дія не завершена.


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

Уау, я так довго шукав це>. <! Дуже дякую!
Кенора 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 налаштування goto перевірити правильне чи ні

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


1
У формі входу вже є поле form_key, і я встановив домен cookie, і це також не виправили.
Джош Пеннінгтон

видаліть cookie з браузера або Goto accountcontroller.php перевірте, чи (! $ this -> _ validateFormKey ()) {працює чи ні
Amit Bera

Клавіша форми перевіряється належним чином. Насправді, схоже, що loginPostAction працює нормально.
Джош Пеннінгтон

1
@AmitBera Чи повинен я зустрітись із вами магент-чатом? У мене пов'язаний випуск у модулі списку бажань?
Метелик

@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 frontend, так і для бекенда. Наприклад, час роботи комп'ютера кінцевого користувача на 1 годину вперед, ніж час сервера, це означає, що печиво (ідентифікатор сеансу користувача) закінчується, як тільки користувач увійде або спробує додати елемент.


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


Я спробував ваше рішення, але немає виключення.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">

Це воно.


3

Якщо ви використовуєте кеш лаку, може виникнути інша проблема. Я цитую рішення, яке я знайшов в іншому місці. https://github.com/nexcess/magento-turpentine/isissue/169

І ось ми пішли ... Востаннє, коли мені трапилася ця проблема із входом у систему, я помітив, що я "отримав" два різних файли cookie з однаковою назвою. "Frontend". Усі файли цих файлів cookie були ідентичними, крім поле "домен". У першому файлі cookie значення домену було "mydomain.com", тоді як у другому було "www.mydomain.com". Це трапляється, коли користувач вже не має файлу cookie для прямого доступу та вводить "mydomain.com" у URL-адресі свого веб-переглядача. Це ініціює встановлення несправного файлу cookie "frontend" і змінює завдання! Повернувшись до нашого сервера, у нас є правило, що якщо веб-користувач натискає "mydomain.com", щоб він обслуговував його "www.mydomain.com". Це означає, що у веб-переглядачі користувача в адресному рядку URL-адреса перетворюється з "mydomain.com" на "www.mydomain.com". Я не впевнений, що це має відношення до проблеми входу в систему. Я просто згадую про це. Рішення. У налаштуваннях magento при параметрах кешування скипидару існує опція "Нормалізувати хост". Вам потрібно це включити. Ось це! Після цього жодної безладної штуки немає подвійного печива фронтену! Сподіваюся, це допомагає!


2

Причиною цієї проблеми є те, що користувацька форма входу не містить жодної форми_кількісті, і там відбувається перевірка ключа форми у loginPostAction Magento.

Ви можете виправити це як нижче:

  1. Перейдіть у додаток / дизайн / frontend / [Ваш пакет] / [Ваша тема] /template/customer/form/login.phtml

Знайти:

і вставте це відразу після коду вище:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. Перейдіть у додаток / дизайн / frontend / Your-package] / [Your-topic] /template/persistent/customer/form/login.phtml та застосуйте ті самі зміни.

1

Вищезазначене працювало для мене абсолютно чудово, але я переходив від Magento 1.4.1 до 1.9.1, так що це був величезний стрибок. Файлів ніде не було знайдено у вказаному вище місці, але вони знаходились у папці app / design / frontend / BASE.

/ додаток / дизайн / frontend / BASE / за замовчуванням / шаблон / стійкий / клієнт / форма /

Ця базова папка містить багато спільних файлів, починаючи з Magento 1.4, тому я прочитав ... Сподіваюся, це врятує когось багато годин роботи, які мені знадобилися ..


1

Якщо ви використовуєте будь-яке соціальне розширення для входу, тоді також додайте ключ форми у цей файл login.phtm


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

1

Переконайтесь, що php-mbstring встановлений та включений на вашому сервері.

Якщо це не так, вхід адміністратора буде працювати, поки клієнт не стане.

Цю перевірку можна здійснити, вивчивши вихід phpinfo()або тимчасово включивши виняток для входу навколо рядка 177в:app/code/core/Mage/Customer/controllers/AccountController.php

Майте на увазі, що операція може розкривати пароль клієнта в зареєстрованому трасі виключення.


0

У мене була та сама проблема, і я вирішив її, видаливши всі файли cookie. Здається, проблема трапиться, якщо у вас є кілька різних магазинів магенто і одночасно входите в них.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.