我有一个管理员 webapp。在执行任何操作之前必须先登录。现在 /default/index/index 具有登录表单,它是一个 ExtJs 组件。基本上登录过程是一个 ajax 进程。我创建了一个插件来禁用渲染和布局并检查用户是否登录(还没有完整的 acl)。
这是代码:
public function preDispatch(Zend_Controller_Request_Abstract $request) {
parent::preDispatch($request);
if($request->isXmlHttpRequest()){
$ViewHelper = Zend_Controller_Action_HelperBroker::getStaticHelper("ViewRenderer");
$ViewHelper->setNoRender(true);
Zend_Layout::getMvcInstance()->disableLayout();
}
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();
if(!Zend_Auth::getInstance()->hasIdentity()){
$url = "/".$module."/".$controller."/".$action;
$session = new Zend_Session_Namespace("myapp.auth");
$session->requestURL = $url;
$request->setModuleName("default");
$request->setControllerName("index");
$request->setActionName("index");
$request->setDispatched();
}
}
这似乎可行,但地址栏仍然有原始请求 url。例如,我输入"myapp/admin/cpanel"
了 url 栏,它在浏览器上打开登录页面,而地址栏仍然有"myapp/admin/cpanel"
。此时登录失败,因为输出有一些 html 渲染,我相信来自登录页面(已经直接击中时工作正常)。
以前有没有人经历过,或者只是我做错了什么。如果你能分享你的经验,我会很高兴。
感谢您阅读本文。