लॉगिन करें और ग्राहक को अपनी वेबसाइट पर पुनर्निर्देशित करें


10

एक mutistore-multwebsite मैगेंटो में, मैं उपयोगकर्ताओं को उसी वेबसाइट पर लॉग इन करने के लिए मजबूर करना चाहूंगा, जो उन्होंने पंजीकृत की है। वे किसी भी वेबसाइट में, किसी भी लॉगिन फ़ॉर्म का उपयोग कर सकते हैं, लेकिन फॉर्म को उनकी क्रेडेंशियल्स की जांच करनी चाहिए और उन्हें सही वेबसाइट पर पुनर्निर्देशित करना चाहिए।

मैंने ग्राहक की वेबसाइट की जांच करने की कोशिश की, और उसे लॉगिन करने के लिए मजबूर किया। हालांकि यह काफी अच्छा काम नहीं कर रहा है। उपयोगकर्ता वर्तमान वेबसाइट पर लॉग इन हो जाता है, न कि वह जिसे उसने पंजीकृत किया है।

एप्लिकेशन / कोड / स्थानीय / दाना / ग्राहक / सत्र में

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 से लॉगिन का प्रयास किया है, तो ग्राहक को वेबसाइट पर qutologin के साथ वेबसाइट पर रीडायरेक्ट करना चाहिए। सही?
अमित बेरा

हां, यह सही है
ज़ेकिया

जवाबों:


10

सबसे पहले, आपको सेटिंग में कुछ बदलाव करने होंगे।

कई वेबसाइट के बीच ग्राहक खाते साझा करें

इस सुविधा को यहाँ कॉन्फ़िगर करना चाहिए: System -> Configuration -> Customer Configuration -> Share Customer Accounts

के लिए यह सेटिंग बनाने ग्लोबल के लिए सभी वेबसाइटों के लिए हर ग्राहक को बांटने

यहाँ छवि विवरण दर्ज करें

वेबसाइटों के बीच लॉगिन साझा करें

विभिन्न वेबसाइट पर दुकानों के बीच स्विच करते समय सत्र को रखने के लिए , सिस्टम> कॉन्फ़िगरेशन> जनरल> वेब में "फ्रंट पर एसआईडी का उपयोग करें" सक्षम करें :

यहाँ छवि विवरण दर्ज करें

उपयोगकर्ताओं को उसी वेबसाइट पर रीडायरेक्ट करने के लिए बाध्य करें जिसे उन्होंने पंजीकृत किया है

जब हमने किसी अन्य वेबसाइट से लॉगिन करने का प्रयास किया है , उसी वेबसाइट पर अनिवार्य रूप से ग्राहक लॉगिन करें।

उपयोग 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
यह इस समस्या को संभालने का एक सही तरीका है। लेकिन इस पद्धति के साथ, वेबसाइट ए में एक ग्राहक वेबसाइट बी में एक आदेश दे सकता है। यह परियोजना विनिर्देश से प्रतिबंध हो सकता है।
फ्रेंक गार्नियर

ठीक है, यह परियोजना विनिर्देश पर निर्भर करता है
अमित बेरा

क्या ग्राहकों को दूसरी वेबसाइट से ऑर्डर करने से रोकना संभव है। यह एक खुदरा / थोक मल्टीस्टोर कॉन्फ़िगरेशन है, इसलिए खुदरा ग्राहकों को थोक वेबसाइट पर लॉग इन करने की अनुमति नहीं दी जानी चाहिए
zekia

हाँ, यह possiable
अमित बेरा

मैं कुछ सवाल है ?. आप एक ग्राहक को खुदरा विक्रेता या थोक व्यापारी कैसे परिभाषित करते हैं?
अमित बेरा

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

क्या आपका मतलब है कि मुझे लॉगिन () के बजाय सेट कोड कस्टमर्सएज़लॉगडइन () में पोस्ट किए गए कोड को रखना चाहिए? कृपया अधिक विस्तृत उत्तर दें।
जेकिया

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.