3

顧客としてログインしようとしています。次のコード (AJAX) とこの外部の magento ストアを要求しています。

<?php
require_once "../app/Mage.php"; 
umask(0);
Mage::app('default');
Mage::getSingleton("core/session", array("name" => "frontend"));
$user = $_POST['user'];
$password = $_POST['password'];
$session = Mage::getSingleton('customer/session');
$flag = 0;  
$resultArr = array();
function customerLogin($user,$password){
    try{        
        $session = Mage::getSingleton('customer/session');
        $result = $session->login($user,$password);
        $customer = $session->getCustomer();
        $session->setCustomerAsLoggedIn($customer);

        $resultArr['flag'] = 1;
        $resultArr['msg'] ='Logged in as '.$customer->getName();
        $jsonReturn = json_encode($resultArr);
        return $jsonReturn;
    }catch(Exception $e){
        $resultArr['flag'] = 0;
        $resultArr['msg'] = $e->getMessage();   
        $jsonReturn = json_encode($resultArr);
        return $jsonReturn;
    }
}
echo customerLogin($user,$password);
?>

上記のコードが Var/session ディレクトリでセッション ファイルを正常に作成していますが、log_customer DB テーブルに顧客エントリを書き込むことができないことがわかりました。ここで何が問題なのか誰でも知っています。ありがとう :)

更新 OKie 以下の更新されたコード (customerLogin.php) は、ある条件下で動作しています。

<?php
function customerLogin($user,$password){
    require_once "./app/Mage.php"; 
    Mage::app('default');
    Mage::getSingleton("core/session", array("name" => "frontend"));
    $user = $_POST['user'];
    $password = $_POST['password'];
    $flag = 0;  
    $resultArr = array();
    $session = Mage::getSingleton('customer/session');
    try{        
        $result = $session->login($user,$password);
        //$customer = $session->getCustomer();      
        $session->setCustomerAsLoggedIn($session->getCustomer());
        $resultArr['flag'] = 1;
        $resultArr['msg'] ='Logged in as '.$session->getCustomer()->getName();
        $cusArr = array(
              'isLoggedIn'  => true,
              'name'        => $session->getCustomer()->getName(),
              'id'          => $session->getId(),
              'email'       =>$session->getCustomer()->getEmail(),
          );
        $resultArr['customerData'] = $cusArr;   
        $jsonReturn = json_encode($resultArr);
        return $jsonReturn;
    }catch(Exception $e){
        $resultArr['flag'] = 0;
        $resultArr['msg'] = $e->getMessage();   
        $jsonReturn = json_encode($resultArr);
        return $jsonReturn;
    }
}

echo customerLogin($user,$password);
?>

次のようなディレクトリ構造に従う場合:

|-- app
|-- **customerLogin.php**
|-- downloader
|-- install.php
|-- js
|-- lib
|-- media
|-- var

しかし、次のようにコードを1ディレクトリレベル下に配置すると機能しません。

|-- app
|-- **customerLogin**
    `--**customerLogin.php**
|-- downloader
|-- install.php
|-- js
|-- lib
|-- media
|-- var

誰が問題を知っています。コードを 1 レベル下に配置すると、なぜ magento が log_customer テーブルにセッション エントリを書き込めないのか疑問に思っています。

4

5 に答える 5

1

顧客 ID を取得し、以下のコードを使用します。

Mage::getSingleton('customer/session')->loginById($customerId);
于 2013-02-25T14:45:20.007 に答える
0

このコードを試して、magento の外部からログインし、magento ルートに demo.php ファイルを作成して、次のコードを配置します。

include('app/Mage.php');
Mage::app();
    if($_POST && $_POST["email"] && $_POST["password"])
    {
            $email=$_POST["email"];
            $password=$_POST["password"];
            $session = Mage::getSingleton('customer/session');

            try {
                      $log = $session->login($email, $password);
                      $session->setCustomerAsLoggedIn($session->getCustomer());
                      $customer_id=$session->getCustomerId();

                      $send_data["success"]=true;
                      $send_data["message"]="Login Success";
                      $send_data["customer_id"]=$customer_id;
                } 

                catch (Exception $ex) {
                            $send_data["success"]=false;
                                $send_data["message"]=$ex->getMessage();
                            }
    }
    else
    {
            $send_data["success"]=false;
            $send_data["message"]="Enter both Email and Password";
    }
    echo json_encode($send_data);
于 2013-05-28T06:39:06.187 に答える