アクションを実行する前にログインする必要がある管理者 webapp.one があります。現在、/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"
.at があり、ログイン ページからのものと思われる HTML レンダリングが出力に含まれているため、ログインに失敗します (これは直撃すると正常に動作します)。
誰かが以前にこれを経験したことがありますか、それとも私が何か間違ったことをしているだけですか.これについてあなたの経験を共有していただければ幸いです.
これを読んでくれてありがとう。