以编程方式magento管理连接不起作用

时间:2017-07-31 09:29:12

标签: php magento

我想以编程方式将用户登录到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已正确登录。但是,无论如何,首页显示连接表单,就好像会话未登录而不是管理员的仪表板。

有人可以帮我弄清楚会发生什么问题吗?

2 个答案:

答案 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);
}