我可以像这样成功登录用户,
// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();
// Log in user
$session = Mage::getSingleton('customer/session', array('name' => 'frontend'));
$session->login($username, $password);
$session->setCustomerAsLoggedIn($session->getCustomer());
// redirect with session ID
header('Location: https://www.domain.com/?SID='.$session->getEncryptedSessionId());
exit;
然后我可以获得我需要的任何用户数据,
// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();
if(Mage::getSingleton('customer/session')->isLoggedIn())
echo Mage::getSingleton('customer/session')->getId();
else
echo 'Not logged in';
问题是上面的代码块在用户通过网站上的表单登录时返回“未登录”,而不是使用第一个块中的代码登录。
两个登录方法似乎创建了可以并行运行的单独会话。如果用户X使用站点的内置表单登录,然后用户Y使用我的代码登录 - 两个用户都登录。商店说,欢迎用户X,但我的代码返回用户Y的ID。
关于发生了什么的任何想法?我需要用户能够以任一方式登录,但需要能够获取他们的ID。
答案 0 :(得分:0)
//在该控制器中创建新控制器创建函数,例如IndexController.php
<强> abc.com/modulename/index/customLogin 强>
public function customLoginAction()
{
if(Mage::getSingleton('customer/session')->isLoggedIn())
echo Mage::getSingleton('customer/session')->getId();
else{
echo 'Not logged in';
$email = 'abc@gmail.com'
$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail(trim($email));
Mage::getSingleton('customer/session')->loginById($customer->getId());
echo $customer->getId();
}
}
答案 1 :(得分:0)
我还没有100%清楚发生了什么,但我已经解决了问题 - 我做了两处改变。
在 Magento Admin&gt;系统&gt;配置&gt;一般&gt;网络&gt;会话Cookie管理我将 Cookie路径设置为 /
在我包含Magento应用程序的文件中,我添加了一行代码
// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend')); // <- NEW LINE
// ... and so on ...
现在,无论用户如何登录,我的外部代码和商店都同意谁登录。
我可以看到改变cookie路径是如何帮助的,但是如果有人有任何解释为什么额外的代码行有效,那将是值得赞赏的。
干杯!