2015-07-15 2 views
0

Поскольку патч SUPEE-5994 в Magento Кажется, что я получаю ошибку 404 при запросе функции внутри контроллера, перед этим патчем эта функция работает нормально. Согласно this post, он должен что-то сделать с config.xml, но, насколько я знаю, это не относится к блокам adminhtml, которые должны вызываться из контроллера. Я также не могу найти, является ли эта ошибка результатом патча, который необходимо определить маршрутизаторам.Модуль Magento Backend вызывает 404

Я попытался добавить маршрутизатор со всеми контроллерами и блоками, но даже после очистки кэша, выхода из системы и снова, функция по-прежнему является 404.

Это мой код:

приложение/код/​​сообщества/MyModule/Advanced/Controller/AjaxController.php

class Icepay_IceAdvanced_AjaxController extends Mage_Adminhtml_Controller_Action 
{ 

    protected $webservice = null; 

    public function iceWebservice() 
    { 
     if ($this->webservice == null) 
      $this->webservice = new Icepay_IceAdvanced_Model_Paymentmethods(); 
     return $this->webservice; 
    } 

    public function indexAction() 
    { 
     $this->loadLayout(); 
     $this->renderLayout(); 
    } 

    public function get_paymentmethodsAction() 
    { 
     $this->getResponse()->setBody(Zend_Json::encode($this->iceWebservice()->retrieveAdminGrid($this->getRequest()->get("store")))); 
    } 

    public function save_paymentmethodAction() 
    { 
     $adv_sql = Mage::getSingleton('iceadvanced/mysql4_iceAdvanced'); 

     $reference = $this->getRequest()->getPost("reference"); 
     $scopeID = $this->getRequest()->getPost("store"); 

     if (!isset($reference)) 
      return; 

     $adv_sql->setScope($scopeID); 

     $settings = Mage::helper("iceadvanced")->getPaymentmethodExtraSettings(); 

     if ($this->getRequest()->getPost("active_issuers")) { 
      $issuers = explode(",", $this->getRequest()->getPost("active_issuers")); 
      if (count($issuers) >= 1) 
       array_push($settings, "active_issuers"); //At least 1 issuer active is required 
     } 

     foreach ($settings as $setting) { 
      $adv_sql->saveConfigValue($reference, $setting, $this->getRequest()->getPost($setting)); 
     } 

     $this->getResponse()->setBody(sprintf($this->__("%s settings have been saved."), $this->getRequest()->getPost("name"))); 
    } 

} 

приложение/код/​​сообщества/MyModule/Advanced/Block/Adminhtml/Сетка/Paymentmethods.php

class Icepay_IceAdvanced_Block_Adminhtml_Grid_PaymentMethods extends Mage_Adminhtml_Block_Widget implements Varien_Data_Form_Element_Renderer_Interface 
{ 

    protected $_element; 
    protected $_scope; 
    protected $_ajaxLoadPaymentMethodURL; 
    protected $_ajaxSavePaymentMethodURL; 
    protected $_ajaxGetPaymentMethodsURL; 
    protected $debug; 

    public function __construct() 
    { 
     $this->_scope = Mage::app()->getStore(Mage::helper("icecore")->getStoreFromRequest())->getId(); 
     $this->_ajaxLoadPaymentMethodURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/config/index/paymentmethod/{{pm_code}}', array('_secure' => true, 'scope' => $this->_scope)); 
     $this->_ajaxSavePaymentMethodURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/ajax/save_paymentmethod', array('_secure' => true, 'scope' => $this->_scope)); 
     $this->_ajaxGetPaymentMethodsURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/ajax/get_paymentmethods', array('_secure' => true)); 

     $this->setTemplate('icepayadvanced/grid_paymentmethods.phtml'); 
    } 

    public function render(Varien_Data_Form_Element_Abstract $element) 
    { 
     $this->setElement($element); 
     return $this->toHtml(); 
    } 

    public function setElement(Varien_Data_Form_Element_Abstract $element) 
    { 
     $this->_element = $element; 
     return $this; 
    } 

    public function getElement() 
    { 
     return $this->_element; 
    } 

    public function getJS($uri) 
    { 
     return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS, true) . $uri; 
    } 

    public function getPaymentmethods() 
    { 
     return Mage::getSingleton('iceadvanced/mysql4_iceAdvanced')->getAdminPaymentmethodConfigForStore($this->_scope); 
    } 

    public function getAddButtonHtml() 
    { 
     return $this->getChildHtml('add_button'); 
    } 

    protected function _prepareLayout() 
    { 
     $button = $this->getLayout()->createBlock('adminhtml/widget_button') 
      ->setData(array(
       'label' => Mage::helper('icecore')->__('Get paymentmethods'), 
       'onclick' => 'return ICEPAY.retrieveFromICEPAY()', 
       'class' => 'add' 
      )); 
     $button->setName('add_tier_price_item_button'); 

     $this->setChild('add_button', $button); 

     if (version_compare(Mage::getVersion(), '1.7.0.0', '<')) { 
      $this->getLayout()->getBlock('head')->addItem('js_css', 'prototype/windows/themes/magento.css'); 
     } else { 
      $this->getLayout()->getBlock('head')->addItem('skin_css', 'lib/prototype/windows/themes/magento.css'); 
     } 

     $this->getLayout() 
      ->getBlock('head') 
      ->addItem('js_css', 'prototype/windows/themes/default.css'); 

     return parent::_prepareLayout(); 
    } 

} 

Здесь я загрузил config.xml и любой other file для обзора.

Редактировать: Последующий BJ Hoffpauir руководство; это выход error.log

192.168.137.1 - - [17/Июль/2015: 23: 03: 56 +0000] «POST /index.php/icepayadvanced/ajax/get_paymentmethods/key/ ? 21e4f55bb33ad6a323c50140bc5ef585/isAjax = истина HTTP/1.1" 404 16910 "http://192.168.137.124/index.php/admin/system_config/edit/section/icecore/key/e96d9f50648cad8168ebf376470196ad/" "Mozilla/5.0 (Windows NT 6.3; Win64; 64) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/43.0.2357.134 Сафари/537,36"

ответ

0

Это более вероятно после применения последнего патча SUPEE-6285, который сделал другое изменение для контроллеров adminhtml.

Теперь вы должны реализовать метод _isAllowed() в контроллере, в противном случае он доступен только для пользователей admin с с полными разрешениями.

Смотрите этот вопрос на Magento.SE: https://magento.stackexchange.com/q/73646/243

+0

Спасибо за ваш ответ. Я попробовал '_isAllowed()' в AjaxController, но у меня все еще есть 404. В файле config.xml нет параметров меню. Нужно ли мне что-то менять? –

+0

Я быстро просмотрел репозиторий github, вы даже не определили маршрут в 'admin', как раз в' frontend', как это могло бы работать?Если ваши контроллеры - все контроллеры администратора, переместите определение '' из' 'в' ' –

+0

Не все, AjaxController используется в бэкэнд. Результат после нажатия кнопки, которая вызывает 'isAjax', эта ошибка возвращает:' POST https://127.0.0.1/index.php/icepayadvanced/ajax/g...ey/ecef8a8e468421e9c2a9e82aaed176cb/?isAjax=true 404 не найден 1.37s ' –

0

Ricardo, есть несколько папок и файлов, которые могли иметь их разрешения установлены в 777, когда Magento изначально создала их, которые обновляются с помощью пластыря.

Я предлагаю выполнить следующие действия по доступу к файлам и папкам из Magento, чтобы убедиться, что после установки исправления вы можете подтвердить, что для всех прав на файлы и папки установлены значения recommended security ACL's as defined in this guide.

ПРИМЕЧАНИЕ. По умолчанию это руководство в основном отключает функциональность Magento Connect, что является хорошей идеей для ваших производственных сайтов - вы не хотите, чтобы ANYONE устанавливала программное обеспечение непосредственно на вашу производственную систему без тестирования и архивирования в источнике репозиторий кода, например git/hg/svn ..., если вам нужно использовать эту функциональность, в этом руководстве содержатся инструкции о том, как временно ослабить разрешения, достаточные для использования этой утилиты, а затем как восстановить дополнительные параметры безопасности, когда вы закончите.

Следуйте этому руководству, оно, скорее всего, решит ваши 404 проблемы.Если этого не произойдет, найдите файл журнала сервера веб Apache или Nginx и Grep его ошибки 404 - например, мои журналы хранятся в

/var/log/apache2/access.log 
/var/log/apache2/error.log 

на моей системе Ubuntu 14.04, и когда я запускаю команду

cat /var/log/apache2/error.log | grep 404 

я мог бы увидеть вывод вроде следующего:

[Sun Jul 12 21:39:54.824860 2015] [:error] [pid 1234] [client 10.10.10.10:51404] script '/var/www/html/script.php' not found or unable to stat 
[Sun Jul 12 21:39:54.824860 2015] [:error] [pid 1234] [client 10.10.10.10:51404] script '/var/www/html/script.php' not found or unable to stat 

Paste, что вы найдете, когда вы бежите, что cat команда замены /var/log/apache2/error.log с Whe rever ВАШ файл журнала веб-сервера сохраняется. Измените свои вопросы & вставьте то, что вы найдете в своем вопросе, и мы можем помочь вам найти источник ошибки 404 и конкретный контекст, в котором он генерирует ошибку.

на основе информации, содержащейся в the supplied pastebin:

"192.168.137.1 - - [20/Jul/2015:08:39:03 +0000] "GET /index.php/admin/system_config/edit/section/icecore/key/e43339d0ca7181a8e347c7e991ef840f/ HTTP/1.1" 200 23324 "http://192.168.137.124/index.php/admin/system_config/index/key/d266293b931243779092e7c1d1c5f84d/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" 
"192.168.137.1 - - [20/Jul/2015:08:39:09 +0000] "POST /index.php/icepayadvanced/ajax/get_paymentmethods/key/743d139de39f76ead943a8651787de64/?isAjax=true HTTP/1.1" 404 16910 "http://192.168.137.124/index.php/admin/system_config/edit/section/icecore/key/e43339d0ca7181a8e347c7e991ef840f/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" 

Первый вызов (GET) ударять конечную точку в /index.php/admin/system_config/edit/section/icecore/key/e43339d0ca7181a8e347c7e991ef840f/ успешно возвращает ответ 200.

Второй вызов (POST) ударять конечную точку в /index.php/icepayadvanced/ajax/get_paymentmethods/key/743d139de39f76ead943a8651787de64/?isAjax=true не удается с 404

Существует только четыре причины, я могу видеть, что происходит:

  1. нет никакого основного файла в папке, указываются в конфигурации xml.
  2. Права доступа к файлу не позволяют его считывать процессом веб-сервера
  3. Вам все еще нужно реализовать метод _isAllowed(), как и ожидалось после SUPEE-6285. Я согласен с комментарием kel in this answer от Fabian тем, что вы не должны просто возвращать true, поскольку это открывает уязвимость безопасности (по общему признанию, трудно получить доступ, если вы не можете войти в панель администратора). Кроме того, после рассмотрения источника GitHub для модуля, я согласен с комментариями Фабиана относительно этого ответа, поскольку, поскольку в текущем файле config.xml нет никакого Adminhtml.xml или ANY существующего ACL, вам придется реализовать его самостоятельно ИЛИ запросить поставщика выполнить Обновить.

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

МОЖНО быть в том, что была некоторая нечетная причуда, которая позволяла этому поведению функционировать, который также был закрыт одним из последних исправлений, но даже если бы это было так, добавив поддержку для _isAllowed в некотором роде, вероятно, обязательный.

+1

После вашего гида; ошибка: '192.168.137.1 - - [17/Jul/2015: 23: 03: 56 +0000]" POST /index.php/icepayadvanced/ajax/get_paymentmethods/key/21e4f55bb33ad6a323c50140bc5ef585/?isAjax=true HTTP/1.1 " 404 16910 "http://192.168.137.124/index.php/admin/system_config/edit/section/icecore/key/e96d9f50648cad8168ebf376470196ad/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/43.0.2357.134 Safari/537.36 "' –

+0

Ricardo, вы бы снова запустили со следующим дополнительным параметром: 'cat /var/log/apache2/error.log | grep 404-C 3' Это даст нам немного контекста, напечатав 3 строки выше и ниже матча. –

+1

Я исправил проблему с вашим гидом. Спасибо. –

0

Я добавил следующее в config.xml и решить эту проблему:

<admin> 
    <routers> 
     <iceadvanced> 
      <use>admin</use> 
      <args> 
       <module>Icepay_IceAdvanced</module> 
       <frontName>icepayadvanced</frontName> 
      </args> 
     </iceadvanced> 
    </routers> 
</admin> 

`

Смежные вопросы