我正在尝试通过客户帐户访问产品。为此,我使用了来自oauth_customer.php magento文档页面的示例代码。
Everything is okay and working fine; but the thing I am facing is that whenever I login as customer after successful login page redirects to the Customer Dashboard instead of redirecting to the Authentication URL.
为此,我必须再次手动通过URL链接,因此它会重定向到“身份验证”页面,并在身份验证后显示我想要的内容。
我还尝试从链接中的示例代码扩展帐户控制器:
https://docs.google.com/file/d/0BzCDl5a0zmSVdWdFMG9jMTB1TXM/edit?pli=1
但仍然没有运气。无论如何在登录后再次制作一个回调网址,就像我们在管理员身份验证方面做的那样?
答案 0 :(得分:1)
最后我自己找到了解决方案。我决定在这里发帖,所以它可能对某人有帮助。以及通过以下示例代码:https://docs.google.com/file/d/0BzCDl5a0zmSVdWdFMG9jMTB1TXM/edit?pli=1
我能够获得重定向网址。但重定向路径移动到404页面,因为重定向将重定向链接添加到站点URL。重定向到网址的代码是$this->_redirectUrl($session->getBeforeAuthUrl(true));
我将此代码更改为header( "refresh:1;url=".$session->getBeforeAuthUrl(true));
,因此它已成功重定向到“授权”页面。我假设magento需要几毫秒来创建它的cookie。所以我给它添加了一些刷新时间。这是AccountController类代码:
{yourmagento} / app / code / community / Chalkfy / OAuthRedirect / controllers / AccountController.php
<?php
require_once 'Mage/Customer/controllers/AccountController.php';
class Chalkfly_OAuthRedirect_AccountController extends Mage_Customer_AccountController {
protected function _loginPostRedirect()
{
$session = $this->_getSession();
// if this redirect is a result of the OAuth process, force the redirect
if(stristr($session->getBeforeAuthUrl(),"oauth/authorize?oauth_token=") == 0 )
{
echo "Redirecting Please Wait..";
// Redirect to the URL after get
header( "refresh:1;url=".$session->getBeforeAuthUrl(true));
// $this->_redirect($session->getBeforeAuthUrl(true));
}
else {
parent::_loginPostRedirect();
}
}
}
答案 1 :(得分:1)
使用Oauth时,oauth使用者登录表单会重定向到customer / account / loginPost。
loginPost函数会将您重定向到customer / account / login,因为缺少参数formkey。
只需在表格标记末尾的app / design / frontend / package / theme / template / oauth / authorize / form / login.phtml中添加:
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
添加此项后,重定向将正常工作。在Magento CE 1.9.0.0,EE 1.14.1.x中进行了测试
答案 2 :(得分:0)
您可以覆盖控制器或创建观察者。
答案 3 :(得分:0)
正如bas_van_poppel所说,通过将表单键添加到适当的phtml中,您可以摆脱重定向到常规登录页面。
为了避免重定向到信息中心页面并重定向到您的应用,您需要在setAfterAuthUrl
上的_initForm
方法中移除对app/code/core/Mage/Oauth/controllers/AuthorizeController.php
的调用:
/** @var $helper Mage_Core_Helper_Url */
$helper = Mage::helper('core/url');
$session // We don't want this: ->setAfterAuthUrl(Mage::getUrl('customer/account/login', array('_nosid' => true)))
->setBeforeAuthUrl($helper->getCurrentUrl());
成功登录后,Magento会将客户重定向到客户会话中的after_auth_url值,如果未指定该值,则会将您重定向到before_auth_url的值。
这仅用于说明目的,您应该遵循最佳实践来覆盖此核心控制器。