เข้าสู่ระบบและเปลี่ยนเส้นทางลูกค้าไปยังเว็บไซต์ของเขา


10

ในวีโอไอพี mutistore-multiwebsite ฉันต้องการบังคับให้ผู้ใช้ลงชื่อเข้าใช้เว็บไซต์เดียวกันที่ลงทะเบียนไว้ พวกเขาอาจใช้แบบฟอร์มการเข้าสู่ระบบใด ๆ ในเว็บไซต์ใด ๆ แต่แบบฟอร์มควรตรวจสอบข้อมูลประจำตัวของพวกเขาและเปลี่ยนเส้นทางไปยังเว็บไซต์ที่ถูกต้อง

ฉันพยายามตรวจสอบเว็บไซต์ของลูกค้าและบังคับให้เขาลงชื่อเข้าใช้ มันไม่ทำงานค่อนข้างดีแม้ว่า ผู้ใช้จะได้รับการเข้าสู่เว็บไซต์ปัจจุบันไม่ใช่ที่เขาลงทะเบียน

ในแอพ / รหัส / local / mage / ลูกค้า / 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;
}

ความคิดใด ๆ


หากคุณเข้าสู่ระบบจากหนึ่งเว็บไซต์แล้วเข้าสู่ระบบโดยอัตโนมัติที่เว็บไซต์ของเรา?
Amit Bera

ฉันไม่แน่ใจว่าเข้าใจคำถามของคุณหรือไม่ ผู้ใช้ควรเข้าสู่ระบบและเปลี่ยนเส้นทางไปยังเว็บไซต์ที่เขาลงทะเบียน ไม่ใช่ทั้งเว็บไซต์
zekia

สมมติว่าลูกค้าลงทะเบียนที่เว็บไซต์ A. ลูกค้าลองเข้าสู่ระบบจากเว็บไซต์ B จากนั้นลูกค้าควรเปลี่ยนเส้นทางไปยังเว็บไซต์ A ด้วย qutologin ที่เว็บไซต์ A ขวา?
Amit Bera

ใช่ถูกต้อง
zekia

คำตอบ:


10

ก่อนอื่นคุณต้องทำการเปลี่ยนแปลงบางอย่างในการตั้งค่า

แบ่งปันบัญชีลูกค้าระหว่างหลายเว็บไซต์

System -> Configuration -> Customer Configuration -> Share Customer Accountsคุณควรกำหนดค่าคุณลักษณะนี้ที่นี่:

ทำให้การตั้งค่านี้ไปทั่วโลกสำหรับการใช้งานร่วมกันของลูกค้าทุกเว็บไซต์ทั้งหมด

ป้อนคำอธิบายรูปภาพที่นี่

แบ่งปันการเข้าสู่ระบบระหว่างเว็บไซต์

เพื่อให้เซสชันเมื่อสลับระหว่างร้านค้าบนเว็บไซต์อื่นให้เปิดใช้งาน "ใช้ 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 ของฉัน

เว็บไซต์สองแห่งนี้ใช้งานจากตัวอย่างวีโอไอพีเดียวกันโดยใช้แนวคิดเว็บไซต์

ป้อนคำอธิบายรูปภาพที่นี่


1
นี่เป็นวิธีที่ถูกต้องในการจัดการปัญหานี้ แต่ด้วยวิธีนี้ลูกค้าในเว็บไซต์ A สามารถสั่งซื้อสินค้าในเว็บไซต์ B ซึ่งอาจเป็นข้อ จำกัด จากข้อกำหนดโครงการ
Franck Garnier

ขึ้นอยู่กับข้อกำหนดของโครงการ
Amit Bera

เป็นไปได้หรือไม่ที่จะป้องกันไม่ให้ลูกค้าสั่งซื้อจากเว็บไซต์อื่น นี่คือการกำหนดค่าค้าปลีก / ค้าส่งหลายผู้รับดังนั้นลูกค้ารายย่อยไม่ควรได้รับอนุญาตให้เข้าสู่เว็บไซต์ขายส่ง
zekia

ใช่มันเป็นไปได้
Amit Bera

ฉันมีคำถามสองสามข้อ? คุณกำหนดลูกค้าอย่างไรให้เป็นผู้ค้าปลีกหรือผู้ค้าส่ง
Amit Bera

1

คุณสามารถเขียนวิธีการด้านล่างสำหรับ requirment ของคุณ

เขียนใต้คลาสอีกครั้ง

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 () แทนที่จะเข้าสู่ระบบ ()? กรุณาโพสต์คำตอบอย่างละเอียดยิ่งขึ้น
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); 
    }
}

โปรดทราบว่าคุณจะต้องกำหนดกลุ่มลูกค้าที่แตกต่างให้กับลูกค้าที่มีมุมมองร้านค้าต่างกัน

นอกจากนี้คุณยังสามารถกำหนดแอททริบิวต์ของลูกค้าและตั้งค่าไว้ที่ระหว่างการลงทะเบียนผ่านฟิลด์ที่ซ่อนอยู่ในแบบฟอร์มการลงทะเบียนแทนการกำหนดกลุ่มลูกค้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.