0
votes

I've got an overridden AccountController in which i set the current store to an other as currently running (example: Customer is in website default and store default, going to login page, click login, my loginPostAction sets the store to id "2" (on website 2) and then executes the parent code loginPostAction. The store is set, of course, but after the login and the redirect to home, the customer is not logged in anymore...

Customer->sendlogindata->myaccountcontroller sets store->original account controller logs in without errors (cause $session customer is set)->redirect to home->customer is not logged in anymore...

i set the store with Mage::app()->setCurrentStore($id); . And in index.php i've got an extra where the store is set to the right id (2) too and this works... but the customer is not logged in anymore.. is that an issue with the session cause different websites ?

I don't want to globally share customer.. each website has his own customers, but every customer has to be able to login on default store by setting the right store id before login

AccountController.php overridden:

public $Website_Ids = array(
    array("code" => "gerstore", "id" => "3", "website" => "ger"),
    array("code" => "ukstore", "id" => "2", "website" => "uk"),
    array("code" => "esstore", "id" => "4", "website" => "es"),
    array("code" => "frstore", "id" => "5", "website" => "fr")
);

public function loginPostAction()
{
    $login = $this->getRequest()->get('login');
    if(isset($login['username']))
    {
        $found = null;
        foreach($this->Website_Ids as $WebsiteId)
        {
            $customer = Mage::getModel('customer/customer');
            $customer->setWebsiteId($WebsiteId['id']);
            $customer->loadByEmail($login['username']);
            if(count($customer->getData()) > 0)
            {
                $found = $WebsiteId;
            }
        }
        if($found != null && Mage::app()->getStore()->getId() != $found['id'])
        { /* found, so set currentstore to id */
            Mage::app()->setCurrentStore($found['id']);
            $_SESSION['current_store_b2b'] = $found;
        } /* not found, doesn't matter cause mage login exception handling */
    }
    parent::loginPostAction();
}

Index.php :

session_start();
$session = $_SESSION['current_store_b2b'];

if($session != null || $session != "")
{
    Mage::app()->setCurrentStore($session['id']);
    Mage::run($session['code'], 'store');
}
else
{
    /* Store or website code */
    $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

    /* Run store or run website */
    $mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
    Mage::run($mageRunCode, $mageRunType);
}

Whats the matter ?

EDIT: The website is changed too i checked out by Mage::app()->getWebsite()->getName();

Thanks.

1

1 Answers

0
votes

Try this:

index.php:

session_start();
$session = $_SESSION['current_store_b2b'];

$mageRunType = 'store';

if($session != null || $session != "") {
    $mageRunCode = $session['code']);    
} else {
    $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
}

Mage::run($mageRunCode, $mageRunType);