以编程方式将用户登录到Magento

时间:2014-05-01 21:25:43

标签: php magento login

我希望能够自动将现有客户登录到Magento,然后将其重定向到现场Magento站点,登录。这是在同一台服务器上的两个子域之间。登录将在app.mydomain.com(它本身只是一个PHP应用程序;而不是Magento站点)上进行,然后Magento安装在shop.mydomain.com。

我已经尝试过几十种这样的排列而没有运气。这是我目前的代码:

// Include Magento app
require_once(config::$magento_root . '/app/Mage.php');
Varien_Profiler::enable();
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app('default');

// Initialize Magento session
Mage::getSingleton('core/session', array('name' => 'frontend'));

// Get instance of customer model for the actual website
$customer = Mage::getModel('customer/customer')->setWebsiteId(Mage::app()->getStore()->getWebsiteId());

// Load the client with the appropriate email
$customer->loadByEmail($email_address);

// Get a customer session
$session = Mage::getSingleton('customer/session');

// Login and check the customer by his uid
$session->loginById($customer->getId());

// Redirect to shop home page
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getBaseUrl())->sendResponse();

这确实设法在($session->loginById()返回1)中记录用户,但在重定向时,客户再次注销。在执行任何此操作之前,我已尝试使用session_destroy();我尝试将Magento的Cookie域改为.mydomain.com,但还没有任何效果。这甚至可能吗?

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题并找到了解决方案。

$custSessionId='';

if ($session->isLoggedIn()) {
    //The following gives you the session id for that customer.
    $custSessionId = Mage::getModel("core/session")->getEncryptedSessionId();
}

// Redirect to shop home page
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getBaseUrl() . '?SID=' . $custSessionId)->sendResponse();

答案 1 :(得分:0)

首先,您如何识别此客户是您现有的客户,所以我认为您不会发现...如果您有任何方法可以发现这是现有客户,那么您可以自动登录客户并重定向到哪里想。

答案 2 :(得分:0)

我不认为可以在两个子域之间执行此操作,即使它们位于同一台服务器上也是如此。所以经过一番思考,并以Steve Robbins为基础'评论,我想出了另一个(hacky)解决方案。

从我的(非Magento)应用程序中,我查找了我想要登录并加密的Magento用户ID。然后我在Magento安装的根目录中创建了一个PHP文件,该文件将解密该用户ID,登录Magento,并将用户重定向到Magento的首页。毕竟,这只是通过带有查询字符串参数的重定向将加密的用户ID从应用程序传递到PHP文件。

我认为最好用自定义的Magento模块来处理路由,而不是服务器上的PHP文件...但我不知道如何编写Magento模块,我们&# 39;在时间紧缩中重新开始。