2011-12-21 64 views
4
class Ef_AppSecurity extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     if (!Zend_Auth::getInstance()->getIdentity()) 
     { 
      $redirect = new Zend_Controller_Action_Helper_Redirector(); 
      $redirect->gotoSimpleAndExit('login', 'auth'); 
     } 
    } 
} 

它重定向并更改为新的url,但在浏览器中它会创建一个重定向循环。我想知道如果问题可能来自Apache的mod_rewrite设置。Zend Framework在前端控制器插件重定向导致重定向循环

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

回答

6

不要追加对插件登录/ AUTH,;将标准扩展为

if (!Zend_Auth::getInstance()->getIdentity() 
    && $this->getRequest()->getControllerName() != 'login' 
    && $this->getRequest()->getActionName() != 'auth') 
+0

非常感谢chelmertz的帮助! – eforth 2011-12-21 23:52:17

+0

@eforth高兴我可以帮忙!随意将任何答案标记为“正确”,使“案件关闭”。 – chelmertz 2011-12-22 17:37:44

0

您必须为登录页面添加例外。否则,它将被重定向,并返回到本身导致循环。

因此,如果您的登录页面位于名为“登录”和“索引”操作的控制器中,则需要为该页面和任何其他页面添加可能处理该窗体的异常。

if (!Zend_Auth::getInstance()->getIdentity() 
     && $this->getRequest()->getControllerName() != 'login' 
     && $this->getRequest()->getActionName() != 'index') 
     ) 
    { 
     $redirect = new Zend_Controller_Action_Helper_Redirector(); 
     $redirect->gotoSimpleAndExit('login', 'index'); 
    } 
+0

Isn'这正是我发布的?除了你的行为错误。 – chelmertz 2011-12-21 12:38:58

+0

感谢paulrichards19为我解释为什么我得到循环。 – eforth 2011-12-21 23:55:51