Magento: переписанный контроллер не может перенаправить на страницу входа после истечения времени сеанса
Мы приобрели встроенное расширение ERP для Magento. Мы настроили его и переписали несколько контроллеров. вот фрагмент из моего файла config.xml
<admin>
<routers>
<mdn_extended>
<!-- should be set to "admin" when overloading admin stuff (?) -->
<use>admin</use>
<args>
<module>MDN_Extended</module>
<!-- This is used when "catching" the rewrite above -->
<frontName>mdn_extended</frontName>
</args>
</mdn_extended>
</routers>
</admin>
<global>
<rewrite>
<mdn_extended_advancedstock_warehouse>
<from><![CDATA[#^/AdvancedStock/Warehouse/#]]>
</from>
<to>/mdn_extended/AdvancedStock_Warehouse/</to> <!-- THIS IS AJAX CASE -->
</mdn_extended_advancedstock_warehouse>
<mdn_extended_advancedstock_stockmovement>
<from><![CDATA[#^/AdvancedStock/StockMovement/#]]></from>
<to>/mdn_extended/AdvancedStock_StockMovement/</to> <!-- this is page REFRESH CASE -->
</mdn_extended_advancedstock_stockmovement>
</rewrite>
</global>
Теперь у нас есть интересная проблема здесь. в первом случае перезаписи, если вы делаете какие-либо действия, такие как сортировка / фильтрация в сетке. Он посылает и вызов ajax. В обычном случае, если сеанс пропал, сервер вернул отклоненный json, как в следующем формате
{"ajaxExpired":1,"ajaxRedirect":"http:\/\/upgrade.magento.com\/index.php\/admin\/index\/login\/key\/90d3e0a32ecc2cb8e4183ecde51a0d54\/"}
Но в первом случае, отказанный JSON приходит в следующем формате, URL меняется
{"ajaxExpired":1,"ajaxRedirect":"http:\/\/upgrade.magento.com\/index.php\/AdvancedStock\/index\/login\/key\/2e96b02d545ee3fddaea963ae6ec5d35\/"}
Благодаря этому пользователь переходит на страницу 404.
Теперь рассмотрим второе правило перезаписи.
В этом случае, если время сеанса истекло, и если вы выполняете какие-либо действия в сетке, он обновляет страницу, но вместо того, чтобы зайти на страницу входа, он сообщает о фатальной ошибке (пытаясь получить имя пользователя). После нескольких часов отладки мы обнаружили, что проблема заключается в макете. ручки.
В нормальном случае, если название маршрута module/controller/action
тогда magento загружает дескриптор макета<module_controller_action>
из xml файла также загружается <admin_index_login>
благодаря этому наконец <admin_index_login>
оказано. В случае второй перезаписи magento не загружается <admin_index_login>
обрабатывать поэтому он показывает фатальную ошибку.
Буду признателен за любую подсказку или помощь в этом направлении. Если вам, ребята, нужна какая-то другая информация, я буду рад предоставить вам. Спасибо вам большое!
1 ответ
Вроде поздний ответ, но у нас также была эта проблема в другом модуле, перекрывающем действие sales_order. Мы в основном решили это путем переопределения конструкции наших пользовательских контроллеров следующим образом:
protected function _construct() {
Mage::getSingleton('core/session', array('name'=>'adminhtml'));
if (!Mage::getSingleton('admin/session')->isLoggedIn()) {
$this->_forward('adminhtml/index/login');
return;
} else {
parent::_construct();
}
}
Хотя это решает проблему, основная проблема, кажется, с классом Mage_Adminhtml_Controller_Action
где отказано в действиях вызывает $this->_redirect('*/index/login');
который в основном перенаправляет, в вашем случае, на mdn_extended/index/login
, На самом деле это может привести к некоторым рискам безопасности, поэтому я советую вам всегда перезаписывать контроллер таким образом или изменять основной класс для перенаправления на adminhtml/index/login
,