繁体   English   中英

重定向请求在Zend Application中形成了一个万能的控制器,而不会永远循环

[英]Redirecting requests form a catch-all controller in Zend Application without looping forever

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

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

目前,我正在使用preDispatch中设置的auth自定义插件来简单地检查POST的身份验证凭据(如果我们正在登录),那么在所有情况下,该插件都会存储原始请求并重定向所有人(是否经过身份验证) )到我的身份验证控制器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 App中的标准预调度例程的重定向方法? 提前致谢!

这不是通常在Zend Framework中完成的方式。 并非所有请求都转到一个公共位置,并重定向到原始请求的位置认证。

对于访问控制,请使用Zend_Acl 这样,您可以轻松确定当前用户是否具有访问内容所需的身份验证,否则可以重定向到“迷路”操作。

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

由于_forward是内部重定向,因此您可以传递其他参数并在preDispath中进行检查以避免循环。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM