我想以编程方式将用户登录到magento admin。管理页面位于iframe中,无需身份验证即可自动重定向到管理仪表板。我使用了一个古老帖子中的代码,它与magento核心源匹配。代码是:
umask(0);
$app = Mage::app('default');
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
// supply username
$user = Mage::getModel('core/factory')->getModel('admin/user')->loadByUsername($loginadmin);
if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
Mage::getSingleton('adminhtml/url')->renewSecretUrls();
}
$session = Mage::getSingleton('admin/session');
$session->setIsFirstVisit(false);
$session->setUser($user);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
if ($session->isLoggedIn()) {
//Redirection vers le dashboard
$url = "index.php/admico/dashboard";
header('Location: '.$url);
}
当我var_dump()
数据时,用户存在并且它具有所有信息,如firstname,id等,并且它们都是正确的。代码进入上一个if
并重定向到' index.php / admico / dashboard'所以$session
已正确登录。但是,无论如何,首页显示连接表单,就好像会话未登录而不是管理员的仪表板。
有人可以帮我弄清楚会发生什么问题吗?
答案 0 :(得分:0)
也许在最后一个条件中重定向窗口时,iframe无法访问您网站上的登录会话。我看到你正在使用PHP header
函数。我能想到的唯一可能的解决方案是获取登录会话的SID并将其用作URL参数。所以条件中的一些编辑过的代码看起来像这样:
$SID=$session->getEncryptedSessionId();
$url = "index.php/admico/dashboard?SID=" . $SID;
如果这不起作用,您可以尝试使用带有setcookie()
的PHP函数$session
作为存储数据,然后尝试重定向。您可以找到here的文档。这就是我为你所做的一切。如果这不起作用,请尝试查看this并查看是否有任何可能对您有所帮助。祝你好运!
答案 1 :(得分:0)
我在代码中做了两处更改,它在firefox,safari和chrome上运行正常。在尝试使用此代码之前,我还清理了我的cookie。
test.php的
<iframe src="http://localhost.site/test_login.php" width="100%"></iframe>
test_login.php
<?php
require 'app/Mage.php';
umask ( 0 );
Mage::app ( 'admin' );
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
// supply username
$user = Mage::getModel('admin/user')->loadByUsername("USERNAME");
if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
Mage::getSingleton('adminhtml/url')->renewSecretUrls();
}
$session = Mage::getSingleton('admin/session');
$session->setIsFirstVisit(false);
$session->setUser($user);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
if ($session->isLoggedIn()) {
//Redirection vers le dashboard
$url = "/admin/dashboard/";
header('Location: '.$url);
}