Magento:会话超时后,重写的控制器无法重定向到登录页面

Magento:会话超时后,重写的控制器无法重定向到登录页面,magento,magento-layout-xml,Magento,Magento Layout Xml,我们已经为Magento购买了嵌入式ERP扩展。我们已经定制了它,并且还重写了一些控制器。下面是我的config.xml文件中的一个片段 <admin> <routers> <mdn_extended> <!-- should be set to "admin" when overloading admin stuff (?) --> <use>admin&l

我们已经为Magento购买了嵌入式ERP扩展。我们已经定制了它,并且还重写了一些控制器。下面是我的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>
但在第一种情况下,被拒绝的json采用以下格式,url被更改

{"ajaxExpired":1,"ajaxRedirect":"http:\/\/upgrade.magento.com\/index.php\/AdvancedStock\/index\/login\/key\/2e96b02d545ee3fddaea963ae6ec5d35\/"}
由于此原因,用户转到404页

<强>现在考虑第二重写规则。< /强>

在这种情况下,如果会话超时,并且如果您在网格上执行任何操作,它将刷新页面,但不会转到登录页面,而是报告致命错误(尝试获取用户名) 经过数小时的调试,我们发现这是布局句柄的问题

在正常情况下,如果路由名称为
模块/控制器/操作
,则会加载magento 布局手柄 xml文件中的
也会加载

因此,最后呈现了
。 在第二次重写的情况下,magento未加载
句柄,因此显示致命错误


我非常感谢在这方面的任何提示或帮助。如果你们需要任何其他信息,我很乐意提供给你们。非常感谢你

回答有点晚,但我们在另一个覆盖销售订单操作的模块上也遇到了这个问题。我们通过覆盖自定义控制器的结构基本上解决了这个问题,如下所示:

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\u Adminhtml\u Controller\u Action
有关,其中被拒绝的操作调用
$this->\u重定向('*/index/login')
在您的情况下,它基本上重定向到
mdn\u extended/index/login
。这实际上可能会导致一些安全风险,因此我建议您总是像这样过度委托控制器,或者将核心类更改为重定向到
adminhtml/index/login

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