我要问的内容有很多相关的帖子,但是经过长时间的搜索后无法完全找到我要找的东西,如果它存在于某个地方,我深表歉意。
我的目标——对我的 Zend 应用程序的所有请求都必须通过一个 preDispatch 插件,然后传递给一个自定义的 Auth 控制器,该控制器将决定现有的身份验证凭据是否足以满足所请求的操作。“足够”取决于应用程序的逻辑,因此我想在控制器+模型级别执行此操作。如果它们足够了,它们会将原始请求发送到指定的控制器+动作,如果不是,它们默认为“迷路”动作。
目前我正在使用 preDispatch 中设置的身份验证自定义插件来简单地检查 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 中的标准预调度例程的重定向方法?提前致谢!