Magento 1.9.2.1 SUPEE-7405 admin não funciona

8

Instalei o novo patch hoje - SUPEE-7405 via FTP neste site.

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

Agora, parece que meu armazenamento front-end ainda está funcionando, no entanto, quando tento fazer login no / admin, ele me leva à página de login / senha ... depois que faço o login, recebo um erro.

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}

alguma ideia? Eu já limpei meu var / cache e var / session sem sorte

MuhuPower
fonte

Respostas:

11

Para mim, parece que o patch não foi instalado corretamente.

A validateFormKeyfunção está incluída no patch.

  • Abra o app/code/core/Mage/Core/Model/Session.phparquivo e verifique se a validateFormKeyfunção está aqui
  • Se o arquivo for substituído app/code/local/Mage/Core/Model/Session.php, você precisará adicionar os novos métodos validateFormKeye renewFormKeymanualmente no arquivo substituído. Altere também a linha 60 de:

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

    para

    $this->renewFormKey();
  • Se estiver aqui, é definitivamente um problema de cache / compilação. Lave seu cache, bem como qualquer outro cache (Varnish / APC etc ...)

  • Se você tiver habilitado a compilação, desative a compilação e recompile.
  • Se a função não estiver aqui, isso significa que os arquivos não foram enviados corretamente. Observe que quando você extrai o arquivo do Magentary, os arquivos são extraídos em uma pasta SUPEE-7405-1.9.2.1, você deve abrir esta pasta e extrair os arquivos desta pasta para a raiz do Magento, transferindo todo o SUPEE-7405- A pasta 1.9.2.1 não aplicará o patch.
Raphael na Digital Pianism
fonte
7

O Nexcess_Turpentinemódulo substitui app/code/core/Mage/Core/Model/Session.phpcomo app/code/local/Mage/Core/Model/Session.php. Acabamos de encontrar isso. Este é provavelmente o seu problema. Para apaziguar esse patch sem gastar muito tempo, acho que a solução mais apropriada é adicionar as alterações no arquivo de substituição local. A aguarrás substitui esse arquivo, acredito, porque uma reescrita não funcionou para o cenário específico que eles precisam cobrir. Eu não acho que isso possa ser convertido em uma reescrita.

Aqui está a alteração do patch que precisa ser aplicada:

--- 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());
+    }
}
kirkmadera
fonte
3

Meus sites tinham uma versão modificada de verniz / aguarrás do Session.phparquivo no app/code/local/Mage/Core/Model/diretório

Agora, faça com que as funções apropriadas nesse arquivo se pareçam com as seguintes e tudo funcione novamente.

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());
}
Andy Copley
fonte
2

Além disso, certifique-se de não modificar app/code/core/Mage/Core/Model/Session.phpdiretamente, mas copie o arquivo app/code/local/Mage/Core/Model/Session.phpe faça a modificação apropriada.

(Magento irá verificar o localcaminho do diretório antes de usá-lo core.

Sergey Repin
fonte
Eu esqueci e, essencialmente, o Magento 1.9.2.4 estava sendo executado com app / code / local / Mage / Core / de uma versão anterior do magento no local ... portanto, meu log de administrador quebraria no POST.
BENN1TH
1

Adicione as funções abaixo ao módulo de terceiros / personalizado. Caso contrário, implemente / estenda as funções corretamente.

/**
* 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());
}
}

Obrigado!

Nithin Ninan
fonte
0

Eu tive o mesmo erro, para mim tive que reverter o patch (usando o -R após o arquivo .sh, mas não sei como você faria via PHP)

Em seguida, no Magento, vá para o sistema -> geral -> web -> configurações de validação de sessão

Alterei 'Validar HTTP_X_FORWARDED_FOR' para 'não' e 'Validar HTTP_USER_AGENT' para 'sim. Verifique se o domínio do cookie está definido corretamente também como 'seudominio.com'

Depois de fazer isso, reapliquei o patch e posso efetuar login. Espero que isso ajude a resolvê-lo - parece que qualquer parâmetro incorreto da sessão causará o problema principal do formulário.

Certifique-se de limpar os cookies do navegador também antes de testar

Ricky Odin Matthews
fonte