2015-06-02 11 views
6

Używam tego poniżej kod do logowania i przekierowanie do strony konta:Magento: Zaloguj się i przekierowanie do strony konta z zewnątrz Magento

<?php 
include('store/app/Mage.php'); 
Mage::app(); 

if($_POST && $_POST['login']['username'] && $_POST['login']['password']){ 
    $email = $_POST['login']['username']; 
    $password = $_POST['login']['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; 

      Mage::getSingleton('customer/session')->loginById($customer_id); 
      Mage_Core_Model_Session_Abstract_Varien::start(); 

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

?> 

A potem w aktach skąd Robię żądania ajax używam ten kod:

if(data.success){ 
    window.location = "http://domain.com/store/customer/account/" 
} 

Ale zawsze pokazuje użytkownika jako wylogowania, ale mam prawidłowy identyfikator klienta, a także sukces.

Odpowiedz

1
$email = strip_tags($_GET["login"]); 
$password = strip_tags($_GET["psw"]); 

function loginUser($email, $password) { 

    umask(0); 
    ob_start(); 
    session_start(); 
    Mage::app('default'); 
    Mage::getSingleton("core/session", array("name" => "frontend")); 

    $websiteId = Mage::app()->getWebsite()->getId(); 
    $store = Mage::app()->getStore(); 
    $customer = Mage::getModel("customer/customer"); 
    $customer->website_id = $websiteId; 
    $customer->setStore($store); 
    try { 
     $customer->loadByEmail($email); 
     $session = Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer); 
     if($session->login($email, $password)){ return true;} else { }; 
    }catch(Exception $e){ 
     return $e->getMessage(); 
    } 


     } 



if (loginUser($email,$password) == 1) { 
echo ".. user loged as ".Mage::getSingleton('customer/session')->getCustomer()->getName()."<br>";} else { 
//bad things goes here 
} 
+0

Czy możesz mi powiedzieć, co mi brakuje w moim kodu? Ponieważ jestem w stanie uzyskać nazwę klienta, ale nadal, gdy odwiedzam ten sklep, pokazuje on wciąż niezalogowanego użytkownika. – atif

+0

Myślę, że nie jesteś dokładnie zalogowany, tylko wywołujesz zapisane informacje o sesji, (utworzona sesja logowania przeglądarki i zapisana w sesja magento) z wielu powodów. Najpierw musisz użyć początku sesji. Po drugie, musisz ustawić sklep i musi mieć sesję administratora, załaduj kontroler sesji rdzenia magento. etc etc ... Po prostu użyj funkcji w mojej odpowiedzi i zadziała ... – Martin

+0

Dostaję komunikat ".. user zalogowany jako USERNAME", ale nadal, gdy próbuję odwiedzić stronę konta sklepu, przekierowuje mnie do strony logowania . – atif

1

w moim przypadku kodu Marcina działa, jeśli mogę zmienić nazwę sesji

session_name('frontend'); 
session_start(); 

Jeśli opuścisz nazwę sesji sam domyślnie PHPSESSID który nie jest taki sam jak ten stworzony przez Magento w podręczniku zaloguj się i nie działa w mojej instalacji. Może się to różnić, spróbuj zalogować się ręcznie i sprawdź nazwy plików cookie.

dokumentacja

nazwa_sesji: http://php.net/manual/en/function.session-name.php

Powiązane problemy