Login dan arahkan pelanggan ke situs webnya

10

Di Magento mutistore-multi-situs web, saya ingin memaksa pengguna untuk masuk ke situs web yang sama dengan yang mereka daftarkan. Mereka mungkin menggunakan formulir masuk apa pun, di situs web mana pun, tetapi formulir itu harus memeriksa kredensial mereka dan mengarahkan mereka ke situs web yang benar.

Saya mencoba memeriksa situs web pelanggan, dan memaksanya untuk masuk. Ini tidak bekerja dengan baik. Pengguna masuk ke situs web saat ini, bukan yang dia daftarkan.

Dalam aplikasi / kode / local / mage / Pelanggan / 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;
}

Ada ide?

zekia
sumber
Jika Anda login dari satu situs maka secara otomatis login di situs kami?
Amit Bera
Saya tidak yakin jika mengerti pertanyaan Anda. Pengguna harus masuk dan mengarahkan ke situs web yang didaftarkannya. Tidak kedua situs web
zekia
Misalkan, pelanggan mendaftar di Situs Web A. Pelanggan Telah mencoba login dari Situs B, Maka pelanggan harus mengalihkan ke WebsiteA dengan qutologin di situs webA. Baik?
Amit Bera
Ya, itu benar
zekia

Jawaban:

10

Pertama, Anda perlu melakukan beberapa perubahan dalam pengaturan.

Bagikan akun pelanggan antara beberapa situs web

Anda harus mengkonfigurasi fitur ini di sini: System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Buat pengaturan ini ke Global untuk berbagi setiap pelanggan ke semua situs web .

masukkan deskripsi gambar di sini

Bagikan login antar situs web

Untuk menjaga sesi ketika beralih antar toko di situs web yang berbeda , aktifkan "Gunakan SID di Frontend" di System> Configuration> General> Web :

masukkan deskripsi gambar di sini

Paksa pengguna untuk mengalihkan ke situs web yang sama dengan yang mereka daftarkan

Pelanggan secara paksa masuk ke situs web yang sama dengan yang mereka daftarkan ketika kami mencoba masuk dari situs web lain.

Menggunakan customer_login

Tentukan acara ke 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> 

Kelas pengamat:

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

}

CATATAN:

SAYA TELAH MENGUJI KODE INI DI SITUS WEB SITUS MAGENTO DEMO.

Dua situs web ini berjalan dari instance magento yang sama menggunakan konsep situs web.

masukkan deskripsi gambar di sini

Amit Bera
sumber
1
Ini adalah cara yang tepat untuk menangani masalah ini. Tetapi dengan metode ini, pelanggan di Situs Web A dapat memesan di Situs Web B. Ini dapat menjadi batasan dari spesifikasi proyek.
Franck Garnier
benar, itu tergantung pada spesifikasi proyek
Amit Bera
Apakah mungkin untuk mencegah pelanggan memesan dari situs web lain. Ini adalah konfigurasi multistore eceran / grosir, jadi pelanggan ritel tidak boleh masuk ke situs web grosir
zekia
ya, mungkin
Amit Bera
Saya punya beberapa pertanyaan? bagaimana Anda mendefinisikan pelanggan adalah pengecer atau grosir?
Amit Bera
1

Anda dapat menulis ulang metode di bawah ini untuk keperluan Anda

tulis ulang di bawah kelas

Mage_Customer_Model_Session setCustomerAsLoggedIn metode

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;
}
Murtuza Zabuawala
sumber
Apakah maksud Anda bahwa saya harus meletakkan kode yang saya poskan di setCustomerAsLoggedIn (), bukannya login ()? Silahkan kirim jawaban yang lebih detail.
zekia
1

Gunakan customer_loginacara tersebut untuk menghindari mengubah / menulis ulang / mengganti file inti.

Di config.xml Anda

<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>

Kelas pengamat Anda ( /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); 
    }
}

Perhatikan bahwa Anda harus menetapkan grup pelanggan yang berbeda untuk pelanggan dengan tampilan toko yang berbeda.

Anda juga dapat menetapkan attibute pelanggan dan mengaturnya di saat pendaftaran melalui bidang tersembunyi dalam formulir pendaftaran alih-alih menugaskan kelompok pelanggan.

Vivek Kumar
sumber