在用户授权失败后,我想将他们转发回登录页面。目前 _forward 方法会导致 Zend 挂起并给出超时错误(超过 30 秒)。
登录页面的代码处理登录和注册表单,并转发到授权控制器:
public function indexAction() {
if ($this->_request->isPost()) {
$formData = $this->_request->getPost();
if (array_key_exists('signUp', $formData)) {
$authAction = 'signup';
$form = 'signupForm';
} elseif (array_key_exists('logIn', $formData)) {
$authAction = 'login';
$form = 'loginForm';
}
if ($this->$form->isValid($formData)) {
$this->_forward($authAction, 'user-auth', null, $formData);
} else {
$this->$form->populate($formData);
}
}
}
这工作正常并成功重定向到身份验证控制器。身份验证控制器的登录操作中的代码如下:
public function loginAction() {
$formData = $this->_request->getPost();
$authAdapter = new My_Auth_Adapter();
$authAdapter->setTableName('user')
->setIdentity($formData['username'])
->setCredential($formData['password'])
->setIdentityColumn('username')
->setCredentialColumn('password');
$result = $authAdapter->authenticate();
if ($result->isValid()) {
// success, all good
} else {
$this->_forward('index', 'login', 'default', $formData);
}
}
我们很好地到达这里,成功的授权按预期工作。然而,在我的 else 语句中,将另一个转发回原始登录控制器(我希望填充用户名并回发错误消息)会导致程序挂起,尽管重定向工作正常。
我认为这可能是因为登录控制器正在重新检测发布数据并且我陷入了无限循环,但是删除 $formData 作为转发的最后一个参数并没有改变任何东西。
我还尝试了 $formData['errMsg'] = 'whatever' 上面的转发,然后检查密钥是否存在或是否在登录控制器中设置,但这也不会改变任何事情。
有趣的是,我收到的超时错误引用了 Auth DbTable 适配器:
Fatal error: Maximum execution time of 30 seconds exceeded in /Applications/MAMP/MampServer/mysite/library/Zend/Auth/Adapter/DbTable.php on line 174
关于可能发生的事情有什么想法吗?