繁体   English   中英

从跨站点的外部站点登录magento

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM