我想以编程方式将用户登录到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()数据时,用户就存在了,它拥有所有的信息,比如名字、id等等,一切都是正确的。代码进入最后一个if并重定向到“index.php/admico/dashboard”,以便正确登录$session。但是,无论如何,frontpage会显示连接表单,就像会话没有登录一样,而不是管理员的仪表板。
有人能帮我弄清楚怎么回事吗?

最佳答案

也许当窗口在最后一个条件中被重定向时,iframe无法访问您网站上的登录会话。我看到您正在使用phpheader函数。我能想到的唯一可能的解决方案是获取登录会话的sid并将其用作url参数。因此,在条件中编辑的代码如下所示:

$SID=$session->getEncryptedSessionId();
$url = "index.php/admico/dashboard?SID=" . $SID;

如果这不起作用,可以尝试使用php函数setcookie()$session作为存储数据,然后尝试重定向。您可以找到here的文档。这就是我给你的一切。如果这不起作用,试着看看this是否有什么可以帮助你的。祝你好运!

07-24 17:10
查看更多