[英]magento login from external site, across domains
我正在尝试将Web应用程序与magento链接起来,以便用户登录到该Web应用程序时,他/她也将自动登录到magento。
为简化起见,我正在用一个简单的登录表单对其进行测试。 所以现在我已经安装了magento,编写了带有自定义API的自定义模块,以及一个PHP表单,该表单调用了登录API来尝试对用户进行身份验证。
API模型的代码段:
class Modulename_Model_Api extends Mage_Api_Model_Resource_Abstract
{
function login($email, $password)
{
Mage::app()->setCurrentStore("default");
Mage::getSingleton('core/session');
$session = Mage::getSingleton('customer/session');
if($session->login($email, $password)) {
return $session->getSessionId();
} else {
$this->_fault('login_fail');
return false;
}
}
}
PHP表单的代码段:
<?php
if (isset($_POST['email']) && isset($_POST['password'])) {
$proxy = new SoapClient('http://www.domain.com/magento/api/?wsdl');
$sessionId = $proxy->login('apiuser', 'apikey');
try {
$token = $proxy->call($sessionId, 'customer.login', array(
'email'=>$_POST['email'],
'password'=>$_POST['password']
));
} catch (Exception $e) {
echo $e->faultstring;
}
if ($token) {
setcookie('frontend', $token, time()+3600, "/magento/", ".domain.com");
header('Location: http://www.domain.com/magento/');
} else {
//some error handling
}
}
?>
<form method="POST">
<input type="text" name="email"/>
<input type="password" name="password"/>
<input type="submit" value="Login" />
</form>
到目前为止,登录表单可以完美运行。 但是,当我尝试将PHP表单放到另一个域时,它将失败。
我可以从API调用中获取会话ID。 因此,我最好的猜测是,当我尝试在跨域的会话ID中设置Cookie时,出现了问题。
谁能帮忙吗?
你是对的。 当在与您的Magento后端相同的域上设置会话cookie时,Magento可以读取并登录。但是,当您尝试从其他域设置会话cookie时,由于跨域cookie限制( http: //en.wikipedia.org/wiki/HTTP_cookie#Privacy_and_third-party_cookies )。 如果您尝试从其他域登录客户,则应使用Magento的OAuth API( http://www.magentocommerce.com/api/rest/introduction.html )。
因此,基本上,您的Web应用将充当OAuth使用者,Magento将充当OAuth提供者。 登录到您网站的任何人都将首先登录Magento。 完成OAuth跳舞并且您的Web应用从Magento获得OAuth访问令牌后,您可以使用自己的auth模块使用此访问令牌来处理身份验证/授权。
需要明确的是,该解决方案将首先使客户登录到Magento,然后将其“自动”登录到您的站点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.