Magento:会话超时后,重写的控制器无法重定向到登录页面
我们已经为Magento购买了嵌入式ERP扩展。我们已经定制了它,并且还重写了一些控制器。下面是我的config.xml文件中的一个片段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
<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();
}
}