L'administrateur de Magento 1.9.2.1 SUPEE-7405 ne fonctionne pas

8

J'ai installé le nouveau patch aujourd'hui - SUPEE-7405 via FTP à partir de ce site.

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

Maintenant, il semble que mon magasin frontal fonctionne toujours, mais lorsque j'essaie de me connecter à / admin, cela m'amène à la page de connexion / mot de passe ... une fois connecté, j'obtiens une erreur.

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}

des idées? J'ai déjà effacé mes var / cache et var / session sans chance

MuhuPower
la source

Réponses:

11

Pour moi, il semble que le correctif n'ait pas été installé correctement.

La validateFormKeyfonction est incluse dans le patch.

  • Ouvrez le app/code/core/Mage/Core/Model/Session.phpfichier et vérifiez si la validateFormKeyfonction est là
  • Si le fichier est remplacé dans app/code/local/Mage/Core/Model/Session.php, vous devez ajouter les nouvelles méthodes validateFormKeyet renewFormKeymanuellement dans le fichier remplacé. Changez également la ligne 60 de:

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

    à

    $this->renewFormKey();
  • Si c'est ici, c'est définitivement un problème de mise en cache / compilation. Videz votre cache, ainsi que tout autre cache (Varnish / APC etc ...)

  • Si vous avez activé la compilation, veuillez désactiver la compilation puis recompiler.
  • Si la fonction n'est pas là, cela signifie que les fichiers n'ont pas été téléchargés correctement. Veuillez noter que lorsque vous extrayez l'archive de Magentary, les fichiers sont extraits dans un dossier SUPEE-7405-1.9.2.1, vous devez ouvrir ce dossier et extraire les fichiers de ce dossier vers votre racine Magento, en transférant l'intégralité du SUPEE-7405- Le dossier 1.9.2.1 n'appliquera pas le patch.
Raphael chez Digital Pianism
la source
7

Le Nexcess_Turpentinemodule remplace app/code/core/Mage/Core/Model/Session.phpcomme app/code/local/Mage/Core/Model/Session.php. Nous avons juste rencontré cela. C'est très probablement votre problème. Pour apaiser ce correctif sans y consacrer trop de temps, je pense que la solution la plus appropriée consiste à ajouter les modifications du correctif au fichier de remplacement local. La térébenthine remplace ce fichier, je crois, car une réécriture n'a pas fonctionné pour le scénario particulier qu'ils doivent couvrir. Je ne pense pas que cela puisse être converti en réécriture.

Voici le changement de patch qui doit être appliqué:

--- 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
la source
3

Mes sites avaient une version modifiée du vernis / térébenthine du Session.phpfichier dans le app/code/local/Mage/Core/Model/répertoire.

Faites en sorte que les fonctions appropriées dans ce fichier ressemblent à ce qui suit et tout devrait fonctionner à nouveau.

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
la source
2

Assurez-vous également que vous ne modifiez pas app/code/core/Mage/Core/Model/Session.phpdirectement, mais copiez le fichier dans app/code/local/Mage/Core/Model/Session.phpet effectuez la modification appropriée.

(Magento vérifiera le localchemin du répertoire avant d'utiliser le corechemin.

Sergey Repin
la source
J'ai oublié et essentiellement Magento 1.9.2.4 fonctionnait avec app / code / local / Mage / Core / à partir d'une version antérieure de magento en local ... par conséquent, ma connexion administrateur se briserait sur POST.
BENN1TH
1

Ajoutez les fonctions ci-dessous au module tiers / personnalisé. Sinon, implémentez / étendez les fonctions correctement.

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

Merci!

Nithin Ninan
la source
0

J'ai eu la même erreur, pour moi j'ai dû restaurer le patch (en utilisant le -R après le fichier .sh, mais je ne sais pas comment vous feriez via PHP)

Puis dans le système Magento goto -> général -> web -> paramètres de validation de session

J'ai remplacé «Valider HTTP_X_FORWARDED_FOR» par «non» et «Valider HTTP_USER_AGENT» par «oui». Assurez-vous que votre domaine de cookies est correctement défini, comme «votredomaine.com»

Une fois que j'ai fait cela, j'ai réappliqué le correctif et je peux me connecter. J'espère que cela vous aidera à le résoudre - il semble que tout paramètre de session incorrect entraînera le problème de clé de formulaire.

Assurez-vous de supprimer également les cookies de votre navigateur avant de tester

Ricky Odin Matthews
la source