Zend framework 重定向请求在Zend应用程序中形成一个“捕获所有”控制器,而不会永远循环

Zend framework 重定向请求在Zend应用程序中形成一个“捕获所有”控制器,而不会永远循环,zend-framework,zend-auth,zend-application,Zend Framework,Zend Auth,Zend Application,有很多与我的问题相关的帖子,但是经过长时间的搜索,我找不到我想要的东西,如果它存在于某处,我深表歉意 我的目标——对我的Zend应用程序的所有请求都必须通过preDispatch插件,然后传递给自定义身份验证控制器,该控制器将决定现有身份验证凭据是否足以执行请求的操作。”“足够”取决于应用程序的逻辑,因此我希望在控制器+模型级别执行此操作。如果满足,则将原始请求发送到指定的控制器+操作,否则默认为“丢失”操作 目前,我正在使用preDispatch中设置的auth自定义插件来简单地检查发布的au

有很多与我的问题相关的帖子,但是经过长时间的搜索,我找不到我想要的东西,如果它存在于某处,我深表歉意

我的目标——对我的Zend应用程序的所有请求都必须通过preDispatch插件,然后传递给自定义身份验证控制器,该控制器将决定现有身份验证凭据是否足以执行请求的操作。”“足够”取决于应用程序的逻辑,因此我希望在控制器+模型级别执行此操作。如果满足,则将原始请求发送到指定的控制器+操作,否则默认为“丢失”操作

目前,我正在使用preDispatch中设置的auth自定义插件来简单地检查发布的auth凭据(如果我们正在登录),然后在所有情况下,该插件都会存储原始请求,并将所有人(是否验证)重定向到我的auth控制器a-la:

$request->setModuleName('default')
            ->setControllerName('auth')
            ->setActionName('check')
            ->setParam('oreq',$request->getParams());
我的问题是,在我的auth->check操作中,在做出决定后,我应该如何执行重定向?如果我使用:

$this->_helper->redirector($or['action'], $oreq['controller']);
当这些请求再次通过preDispatch插件时,我显然得到了一个无限循环。当然,我可以通过重定向传递一些东西,以便Auth插件忽略这些请求,但这显然是一个安全漏洞。我曾想过可能会生成并存储一个md5散列,将其存储到会话并将其作为转义参数传递,但这似乎有点粗略


还有更好的主意吗?也许是一种重定向方法,它没有通过Zend应用程序中的标准predispatch例程?提前谢谢

在Zend框架中通常不是这样做的。并非所有请求都会转到一个公共位置并重定向到原始请求位置

对于访问控制,请使用。通过这种方式,您可以轻松确定当前用户是否具有访问内容所需的身份验证,否则将重定向到“丢失”操作

如果您仍然坚持使用您的技术,请使用_forward方法而不是redirect方法

由于
\u forward
是一个内部重定向,您可以传递额外的参数,并在preDispath中进行检查,以避免循环

$this->_forward($action, $controller, $module, $params)

仅供参考,_转发不通过调度