2017-07-31 15 views
6

ユーザーをプログラムで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

おそらく、最後の条件でウィンドウがリダイレクトされると、iframeはあなたのウェブサイトのログインセッションにアクセスできません。私はあなたがPHP header関数を使用していることを確認します。私が考えることができる唯一の可能な解決策は、ログインセッションのSIDを取得し、それをURLパラメータとして使用することです。だからあなたの条件付き内側一部編集したコードは次のようになります。

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

問題が解決しない場合は、保存されたデータとして$sessionとPHP関数setcookie()を使用してみてください、その後、リダイレクトを試すことができます。その文書hereを見つけることができます。それは私があなたのために持っているすべてです。これで問題が解決しない場合は、thisを見て、役立つ情報があるかどうか確認してください。運が良かった!

+0

申し訳ありませんが、それは動作しません:/ – Erlaunis

0

私はコードに2つの変更を加えました。これは、Firefox、Safari、Chromeでうまく動作しています。私はこのコードを試みる前にクッキーをクリアしました。

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

私はあなたのコードを貼り付けコピーされますが、それはまだ動作しません、それはdoesnの私をダッシュ​​ボードにリダイレクトする:/ – Erlaunis

+0

PHPエラー報告は有効になっていますか? –

関連する問題