skip to Main Content

I want to log a user programmatically to magento admin. The admin page is in an iframe and it have to redirect automatically to the admin dashboard without authentication. I used a code found in a ancient post and it matches with the magento core source. The code is :

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

When I var_dump()the data, the user exists and it have all the informations like firstname, id, etc and it’s all correct. The code go inside the last if and redirect to ‘index.php/admico/dashboard’ so the $session is correctly logged in. But, anyway, the frontpage display the connection form as if the session was not logged in and not the dashboard of the admin.

Can someone help me to figure out what’s wrong please ?

2

Answers


  1. Perhaps when the window is redirected in your last conditional, the iframe cannot access that login session on your website. I see that you are using the PHP header function. The only possible solution that I can think of is by getting the SID of the login session and using that as a URL parameter. So some edited code inside your conditional would look something like this:

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

    If that doesn’t work, you can try using the PHP function setcookie() with $session as the stored data and then try the redirect. You can find documentation for that here. That’s all that I’ve got for you. If this doesn’t work, try looking at this and see if there is anything that may help you. Best of luck!

    Login or Signup to reply.
  2. I have made two changes in the code and it is working fine for me on firefox, safari and chrome. I also cleared up my cookies before I attempted this code.

    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);
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search