2011-05-11 122 views
0

我在创建新帐户后让客户保持登录状态遇到了很多麻烦。我创建了一个帐户,并从外部网站将产品添加到购物车,然后将它们发送到Magento商店。我想要发生的事情是:Magento - 客户从外部页面重定向后未登录

  1. 客户进入注册页面并输入相关信息。
  2. 他们进入一个新页面,他们可以选择将免费样品添加到购物车。
  3. 挑选样品后。他们的账户被创建并且他们被重定向到Magento商店并在其购物车中放置了样品。

我遇到的问题是步骤2和3。我创建使用Magento的SOAP API具有以下账户之间:

$customerInfo = array('firstname' => $custFirstname, 'lastname' => $custLastname, 'email' => $email, 'password_hash' => md5($new_password), 'store_id' => 34, 'website_id' => 25,'group_id' => 9); 

// Call API method customer.create 
$newCustomerId = $client->call($session, 'customer.create', array($customerInfo)); 

然后我回到自己的客户ID,这是我传给

public static function _addSamplesToCart($customer_id, $sample_one, $sample_two, $sample_three){ 
Mage::getSingleton("core/session", array("name" => "frontend")); 
$customerSession = Mage::getSingleton('customer/session', array("name" => "frontend")); 
$customerSession->init("customer_bn_us"); 
$customerSession->loginById($customer_id); 
$cart = Mage::getSingleton('checkout/cart'); 
$cart->addProductsByIds($idArray); 
$cart->save(); 
$cart->getCheckoutSession()->setCartWasUpdated(true); 
} 

这些功能实际上是从AJAX请求后调用,所以当我从_addSamplesToCart一个成功的返回值,我做了一个简单的javascrip:实际上它们记录,并增加产品到他们的购物车另一个功能t重定向(window.location =“http://www.myhostname.net/welcome”),它正确地把我带到那里,但我没有登录。

我一直在四处寻找并尝试一些不同的事情,没有任何工作。我也试着做一个隐藏的表单提交给/ customer/account/loginPost,但它仍然不起作用。我已经验证它在Magento中正确创建帐户。我唯一的直觉就是我正在用AJAX和PHP混合做这件事,所以不知怎的,cookies或会话混淆了?

回答

0

如果您尝试从与Magento商店使用的主机名不同的主机名登录,则它无法工作。您可以通过检查在AJAX调用之后是否创建前端cookie来验证此情况。

我建议你创建在Magento接收刚刚创建的用户的ID和执行你在你的函数写的代码一个新的控制器:

www.myhostname.net/autologin/myaction/13(其中13是刚刚创建的客户的ID)。

显然你应该添加别的东西来避免安全问题。

+0

感谢您的回复。事情是,我不是来自不同的主机名。我在hostname.net/signup上有一个来自Magento的外部页面,主要存储位于hostname.net。但是,我做了一些挖掘cookie的工作,并且发现Magento客户会话返回的会话ID与前端cookie不同。我假设我需要将前端Cookie设置为与客户会话具有相同的ID,对吗? – Brandon 2011-05-12 15:48:52

+0

不,我将前端cookie设置为与客户会话具有相同的会话ID,但它仍然不会将我作为登录。现在,在我返回到将AJAX重定向到/ welcome的AJAX调用之前,我设置了Cookie 。我已经验证它也取代了以前的前端cookie。 – Brandon 2011-05-12 16:20:13

+0

对不起所有的重复帖子,但我几乎得到它的工作。我遵循了Fabrizio的建议,并开始使用登录控制器。现在它成功登录我,但现在我坚持要将产品添加到我的购物车。我环顾四周以正确的方式添加产品,而且我确信我做得对。在使用Mage :: log进行了一些挖掘之后,我将问题一直追溯到Sales_Model_Quote_Item的setQty()方法。这个方法调度一个事件似乎有问题:'Mage :: dispatchEvent('sales_quote_item_qty_set_after',array('item'=> $ this))' – Brandon 2011-05-12 23:22:38