Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento: Login and redirect to account page from outside magento

Tags:

magento

I am using this below code to login and redirect to account page:

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

?>

And then on file from where I am making ajax request, I am using this code:

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

But it always show user as logout, though I do get correct customer id as well as success.

like image 372
atif Avatar asked Jun 02 '15 20:06

atif


2 Answers

$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
}
like image 59
Martin Avatar answered Nov 15 '22 07:11

Martin


In my case Martin's code works if I change the session name

session_name('frontend');
session_start();

If you leave the session name alone it defaults PHPSESSID which isn't the same as that created by Magento on a manual login and didn't work in my install. That may vary, try logging in manually and check your cookie names.

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

like image 38
SpottedPaint Avatar answered Nov 15 '22 06:11

SpottedPaint