gpt4 book ai didi

redirect - Magento:扩展客户帐户 Controller 以向忘记密码步骤添加操作

转载 作者:行者123 更新时间:2023-12-04 23:09:34 25 4
gpt4 key购买 nike

我们正在尝试向 AccountController 添加几个操作,以便在 forgotpasswordpost 操作之后添加另一个操作。问题是如果我们将操作添加到 preDispatch logict 以确保您不必登录它仍然会重定向回登录页面。

public function preDispatch()
{
// a brute-force protection here would be nice

parent::preDispatch();

if (!$this->getRequest()->isDispatched()) {
return;
}

$action = $this->getRequest()->getActionName();
if (!preg_match('/^(create|login|logoutSuccess|forgotpassword|forgotpasswordpost|confirm|confirmation|newactionhere)/i', $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}

这不起作用,因为我们首先调用父级,它也运行它,但当然 preg_match 不匹配,它运行运行 $action->getResponse()->setRedirect($url) 方法的身份验证方法这当然会设置 header ,当它返回到我们的代码时并不重要,然后重定向。

我们可以删除对父级的调用,但我不确定这是最好的方法,因为父级也调用它的父级,它运行一些东西来设置布局区域,然后也调用父级方法。我想只用 Mage_Core_Controller_Front_Action 调用父对象,但不确定这是否是正确的方法。

最佳答案

所以这就是我们所做的,我们得到了标志并检查该 Action 是否有禁止调度的标志。然后我们取消它,清除 header 并重置响应代码。

public function preDispatch()
{
// a brute-force protection here would be nice

parent::preDispatch();

$action = $this->getRequest()->getActionName();

// The parent preDispatch call will set:
// 1. the 'no-dispatch' flag and set a
// 2. a 'Location' header for a 302 redirect to the login page
// for any actions which are not on the list.
// 3. a HTTP Response Code of 302 (temporary redirect).
// We add additional actions securityquestion and securityquestionpost in our override below, but
// we need to undo the settings which get set by the call to the parent above.
if (preg_match('/^(securityquestion|securityquestionpost)/i', $action))
{
$flag = 'no-dispatch';

if ($this->getFlag($action, $flag))
{
unset($this->_flags[$action][$flag]); // Remove the flag to unset it
$this->getResponse()->clearHeader('Location'); // Remove Location header for redirect
$this->getResponse()->setHttpResponseCode(200); // Set HTTP Response Code to OK

}
}

if (!$this->getRequest()->isDispatched()) {
return;
}


if (!preg_match('/^(create|login|logoutSuccess|forgotpassword|forgotpasswordpost|confirm|confirmation|securityquestion|securityquestionpost)/i', $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}

关于redirect - Magento:扩展客户帐户 Controller 以向忘记密码步骤添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com