Войти и перенаправить клиента на его сайт


10

В мультисайтовом мультисайтовом Magento я хотел бы заставить пользователей входить на тот же веб-сайт, который они зарегистрировали. Они могут использовать любую форму входа на любом веб-сайте, но форма должна проверить свои учетные данные и перенаправить их на правильный веб-сайт.

Я попытался проверить веб-сайт клиента и заставить его войти в систему. Это не работает довольно хорошо, хотя. Пользователь авторизуется на текущем веб-сайте, а не на том, который он зарегистрировал.

В приложении / код / ​​локальный / маг / клиент / Session.php

public function login($username, $password)
{
    /**************************************************/
    $customer = Mage::getModel("customer/customer");
    $customer_website = null;


    foreach (Mage::app()->getWebsites() as $website) {
        $customer->setWebsiteId($website->getId());
        $customer->loadByEmail($username);
        //check if user exists
        if($customer->getName()){
            $customer_website = $website->getId();
        }
    }
    /*************************************************/
    $customer = Mage::getModel('customer/customer')->setWebsiteId($customer_website);

    if ($customer->authenticate($username, $password)) {
        $this->setCustomerAsLoggedIn($customer);
        return true;
    }
    return false;
}

Любые идеи?


Если вы входите с одного сайта, то автоматически входите на наш сайт?
Амит Бера

Я не уверен, что понял ваш вопрос. Пользователь должен войти в систему и перенаправить на сайт, на котором он зарегистрирован. Не на обоих сайтах
zekia

Предположим, что клиент зарегистрировался на веб-сайте A. Клиент. Попробуйте войти с веб-сайта B, затем клиент должен перенаправить на веб-сайт A с ктологином на веб-сайте A. правильно?
Амит Бера

Да, это правильно
zekia

Ответы:


10

Во-первых, вам нужно сделать некоторые изменения в настройках.

Обмен учетными записями клиентов между несколькими веб-сайтами

Вы должны настроить эту функцию здесь: System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Задайте для этого параметра значение Global, чтобы каждый клиент мог делиться со всеми сайтами .

введите описание изображения здесь

Поделиться логином между сайтами

Чтобы сохранить сеанс при переключении между магазинами на другом веб-сайте , включите «Использовать SID на внешнем интерфейсе» в « Система> Конфигурация> Общие> Веб» :

введите описание изображения здесь

Заставить пользователей перенаправлять на тот же сайт, который они зарегистрировали

Принудительно войдите в систему клиента на тот же веб-сайт, который они зарегистрировали, когда мы попытались войти с другого веб-сайта.

использование customer_login

Определите событие для config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento165528>
      <version>1.0.0</version>
    </Stackexchange_Magento165528>
  </modules>
  <global>
    <models>
      <magento165528>
        <class>Stackexchange_Magento165528_Model</class>
      </magento165528>
    </models>
    <events>
      <customer_login> <!-- identifier of the event we want to catch -->
        <observers>
          <customer_login_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento165528/observer</class> <!-- observers class alias -->
            <method>redirectoSourceDomain</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </customer_login_handler>
        </observers>
      </customer_login>
    </events>
  </global>
</config> 

Класс наблюдателя:

<?php
class Stackexchange_Magento165528_Model_Observer
{

    public function redirectoSourceDomain(Varien_Event_Observer $observer)
    {
        $_customer = $observer->getEvent()->getCustomer();
        /* 
        * Store of website from which website  Customer have registered
        */
        $_customer_resgister_store_id= $_customer->getStoreId();

        if($_customer_resgister_store_id != Mage::app()->getStore()->getStoreId()){
            $allStores=Mage::app()->getStores(); //get list of all stores,websites

            foreach ($allStores as $_eachStoreId => $val){
                $_storeId = Mage::app()->getStore($_eachStoreId)->getId();
                //get url using store id
                if($_customer_resgister_store_id  == $_eachStoreId ){
                $Websiteurl= Mage::app()->getStore($_storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
                $_redirecUrl =  $Websiteurl."customer/account/login?SID=".Mage::getModel("core/session")->getEncryptedSessionId(); 
                /* Force redirect to repective Website */
                Mage::app()->getFrontController()->getResponse()
                            ->setRedirect($_redirecUrl)
                            ->sendResponse();
                        exit;   
                }

            }

        }
        return;
    }

}

НОТА:

Я проверил этот код на своих веб-сайтах MAGENTO DEMO Store.

Эти два веб-сайта работают из одного экземпляра magento с использованием концепции веб-сайта.

введите описание изображения здесь


1
Это правильный способ справиться с этой проблемой. Но с помощью этого метода клиент на веб-сайте A может разместить заказ на веб-сайте B. Это может быть ограничением из спецификации проекта.
Франк Гарнье

правильно, это зависит от спецификации проекта
Амит Бера

Можно ли запретить клиентам делать заказы с другого сайта. Это конфигурация розничного / оптового мультимагазина, поэтому розничным клиентам не разрешается входить на оптовый веб-сайт
zekia

да, это возможно
Амит Бера

У меня мало вопросов? как вы определяете покупателя - розничного или оптового продавца?
Амит Бера

1

Вы можете переписать ниже метод для вашего требования

переписать ниже класса

Mage_Customer_Model_Session setCustomerAsLoggedIn метод

public function setCustomerAsLoggedIn($customer)
{
    $this->setCustomer($customer);
    $this->renewSession();
    Mage::dispatchEvent('customer_login', array('customer'=>$customer));
    // check here customer website ID and redirect to their own registered website  
    return $this;
}

Вы имеете в виду, что я должен разместить код, который я разместил в setCustomerAsLoggedIn (), вместо login ()? Выложите более подробный ответ, пожалуйста.
Зекия

1

Используйте customer_loginсобытие, чтобы избежать изменения / перезаписи / переопределения основных файлов.

В вашем config.xml

<config>
  <global>
    <models>
        ....
    </models>
    <events>
        <customer_login>
            <observers>
                <yourobservername>
                    <type>model</type>
                    <class>yourmodule/path_to_class</class>
                    <method>loginSwitchStore</method>
                </yourobservername>
            </observers>
        </customer_login>    
    </events>
  </global>
</config>

Ваш класс наблюдателя ( /app/code/local/YourCompany/YourModule/Model/Observer.php):

class YourCompany_YourModule_Model_Observer
{
    public function loginSwitchStore($observer)
    {
        $customer = $observer->getCustomer();

        switch($customer->getCustomerGroup())
        {
            case 1: $storeCode = 'storeview1';break;
            case 2: $storeCode = 'storeview2';break;
            case 3: $storeCode = 'storeview3';break;
        }
        $params = array( '_current' => TRUE, '_use_rewrite' => TRUE, '_store_to_url' => TRUE, '_store' => Mage::app()->getStore($storeCode)->getId() );  
        $url = Mage::getUrl('', $params); 
        Mage::app()->getResponse()->setRedirect($url);

        //add this if you want them to stay in that store even after logout
        Mage::getModel('core/cookie')->set('store', $storeCode); 
    }
}

Обратите внимание, что вам нужно будет назначать разные группы клиентов покупателям разных представлений магазина.

Вы также можете назначить атрибуты клиента и установить их при регистрации через скрытое поле в форме регистрации вместо назначения групп клиентов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.