Увійти та перенаправити клієнта на його веб-сайт


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

Припустимо, зареєструйте клієнтів на веб-сайті А. Клієнт спробує увійти з Веб-сайту B, тоді клієнт повинен перенаправити на WebsiteA за допомогою qutologin на websiteA. правильно?
Аміт Бера

Так, це правильно
zekia

Відповіді:


10

Спочатку потрібно внести деякі зміни в налаштування.

Поділитися обліковими записами клієнтів між кількома веб-сайтами

Ви повинні налаштувати цю функцію тут: System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Зробіть це налаштування глобальним для спільного використання кожного клієнта на всіх веб-сайтах .

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

Поділитися входом між веб-сайтами

Щоб зберегти сеанс під час перемикання між магазинами на іншому веб-сайті , увімкніть "Використовувати SID на Frontend" у системі> Конфігурація> Загальне> Веб :

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

Примушуйте користувачів перенаправлятись на той самий веб-сайт, який вони зареєстрували

Примусово увійти клієнт на той самий веб-сайт, який вони зареєстрували, коли ми намагалися увійти з іншого веб-сайту.

Використовуйте 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;
    }

}

ПРИМІТКА:

Я ТЕСТУЮ ЦІЙ КОД на МОЕМ МАГЕНТО ДЕМО ЗБЕРІГАННЯ САЙТІВ.

Цей два веб-сайти працює з одного і того ж екземпляра магенто, використовуючи концепцію веб-сайту.

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


1
Це правильний спосіб вирішення цієї проблеми. Але за допомогою цього методу клієнт на веб-сайті A може замовити веб-сайт B. Це може бути обмеженням від специфікації проекту.
Франк Гарньє

правильно, це залежить від специфікації проекту
Amit Bera

Чи можна завадити клієнтам замовляти з іншого веб-сайту. Це конфігурація багатоповерхової роздрібної / оптової торгівлі, тому роздрібним покупцям не можна дозволяти входити на веб-сайт оптового
продажу

так, можливо
Аміт Бера

У мене мало запитань ?. як ви визначаєте клієнта - продавця чи оптовика?
Аміт Бера

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 ()? Опублікуйте, будь ласка, більш детальну відповідь.
zekia

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.