Администратор SUPER-7405 в Magento 1.9.2.1 не работает


8

Я установил новый патч сегодня - SUPEE-7405 через FTP с этого сайта.

https://magentary.com/kb/install-supee-7405-without-ssh/

Похоже, что мое хранилище интерфейса все еще работает, однако, когда я пытаюсь войти в / admin, я перехожу на страницу логина / пароля ... как только я вхожу, я получаю ошибку.

Invalid method Mage_Core_Model_Session::validateFormKey(Array
(
    [0] => y6h9TjgvchV8hCZT
)
)

Trace:
#0 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Varien_Object->__call('validateFormKey', Array)
#1 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Mage_Core_Model_Session->validateFormKey('y6h9TjgvchV8hCZ...')
#2 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1357): Mage_Admin_Model_Observer->actionPreDispatchAdmin(Object(Varien_Event_Observer))
#3 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1336): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Admin_Model_Observer), 'actionPreDispat...', Object(Varien_Event_Observer))
#4 /home/a0cegcom/public_html/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('controller_acti...', Array)
#5 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(527): Mage::dispatchEvent('controller_acti...', Array)
#6 /home/a0cegcom/public_html/app/code/core/Mage/Adminhtml/Controller/Action.php(160): Mage_Core_Controller_Varien_Action->preDispatch()
#7 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(407): Mage_Adminhtml_Controller_Action->preDispatch()
#8 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#9 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#10 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#11 /home/a0cegcom/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#12 /home/a0cegcom/public_html/index.php(88): Mage::run('', 'store')
#13 {main}

Любые идеи? Я уже очистил мои var / cache и var / session без удачи

Ответы:


11

Мне кажется, что патч не был установлен должным образом.

validateFormKeyФункция включена в патче.

  • Откройте app/code/core/Mage/Core/Model/Session.phpфайл и дважды проверьте, если validateFormKeyфункция здесь
  • Если файл переопределен app/code/local/Mage/Core/Model/Session.php, вы должны добавить новые методы validateFormKeyи renewFormKeyвручную в переопределенный файл. Также измените строку 60 с:

    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));

    в

    $this->renewFormKey();
  • Если это здесь, это определенно проблема кеширования / компиляции. Очистите кеш, как и любой другой кеш (Varnish / APC и т. Д.)

  • Если у вас включена компиляция, отключите компиляцию, затем перекомпилируйте.
  • Если функции здесь нет, это означает, что файлы не были загружены должным образом. Обратите внимание, что при извлечении архива из Magentary файлы извлекаются в папку SUPEE-7405-1.9.2.1, вы должны открыть эту папку и извлечь файлы из этой папки в корневой каталог Magento, передав весь SUPEE-7405- 1.9.2.1 папка не будет применять патч.

7

Nexcess_TurpentineМодуль переопределяет , app/code/core/Mage/Core/Model/Session.phpкак app/code/local/Mage/Core/Model/Session.php. Мы просто столкнулись с этим. Это очень вероятно, ваша проблема. Чтобы утешить этот патч, не тратя на него слишком много времени, я думаю, что наиболее подходящим решением является добавление изменений патча в локальный файл переопределения. Скипидар переопределяет этот файл, я полагаю, потому что переписывание не сработало для конкретного сценария, который они должны охватить. Я не думаю, что это может быть преобразовано в переписать.

Вот изменение патча, которое необходимо применить:

--- a/app/code/core/Mage/Core/Model/Session.php
+++ b/app/code/core/Mage/Core/Model/Session.php
@@ -36,7 +36,7 @@
  */
 class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
 {
-    public function __construct($data=array())
+    public function __construct($data = array())
     {
         $name = isset($data['name']) ? $data['name'] : null;
         $this->init('core', $name);
@@ -50,8 +50,27 @@ class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
     public function getFormKey()
     {
         if (!$this->getData('_form_key')) {
-            $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+            $this->renewFormKey();
         }
         return $this->getData('_form_key');
     }
+
+    /**
+     * Creates new Form key
+     */
+    public function renewFormKey()
+    {
+        $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+    }
+
+    /**
+     * Validates Form key
+     *
+     * @param string|null $formKey
+     * @return bool
+     */
+    public function validateFormKey($formKey)
+    {
+        return ($formKey === $this->getFormKey());
+    }
}

3

У моих сайтов Session.phpв app/code/local/Mage/Core/Model/каталоге была модифицированная версия лака / скипидара .

Сделайте так, чтобы соответствующие функции в этом файле выглядели следующим образом, и все должно работать снова.

public function getFormKey()
{
    if (Mage::registry('replace_form_key') &&
            !Mage::app()->getRequest()->getParam('form_key', false)) {
        // flag request for ESI processing
        Mage::register('turpentine_esi_flag', true, true);
        return '{{form_key_esi_placeholder}}';
    } else {
        return $this->real_getFormKey();
    }
}

public function real_getFormKey()
{
    if (!$this->getData('_form_key')) {
        //$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
        $this->renewFormKey();
    }
    return $this->getData('_form_key');
}

public function renewFormKey()
{
    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

public function validateFormKey($formKey)
{
    return ($formKey === $this->getFormKey());
}

2

Также убедитесь, что вы не изменяете app/code/core/Mage/Core/Model/Session.phpнапрямую, а копируете файл app/code/local/Mage/Core/Model/Session.phpи вносите соответствующие изменения.

(Magento проверит localпуть к каталогу перед использованием coreпути.


Я забыл и, по сути, Magento 1.9.2.4 работал с app / code / local / Mage / Core / из более ранней версии magento в локальной системе ... поэтому мой вход в систему администратора прерывался на POST.
1

1

Добавьте нижеуказанные функции в Сторонний / Пользовательский модуль. Если не реализовать / расширить функции должным образом.

/**
* Creates new Form key
*/
public function renewFormKey()
{
$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

/**
* Validates Form key
*
* @param string|null $formKey
* @return bool
*/
public function validateFormKey($formKey)
{
return ($formKey === $this->getFormKey());
}
}

Спасибо!


0

У меня была та же ошибка, для меня мне пришлось откатить патч (используя -R после файла .sh, но не знаю, как вы это сделаете через PHP)

Затем в системе Magento goto -> общие -> web -> настройки проверки сеанса

Я изменил «Проверить HTTP_X_FORWARDED_FOR» на «нет» и «Проверить HTTP_USER_AGENT» на «да». Убедитесь, что ваш cookie-домен правильно установлен, например, «yourdomain.com»

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.