Melden Sie sich an und leiten Sie den Kunden auf seine Website weiter


10

In einer Mutentore-Multiwebsite Magento möchte ich Benutzer dazu zwingen, sich auf derselben Website anzumelden, die sie registriert haben. Sie können jedes Anmeldeformular auf jeder Website verwenden, das Formular sollte jedoch ihre Anmeldeinformationen überprüfen und sie auf die richtige Website umleiten.

Ich habe versucht, die Website des Kunden zu überprüfen und ihn zum Anmelden zu zwingen. Es funktioniert aber nicht ganz gut. Der Benutzer wird auf der aktuellen Website angemeldet, nicht auf der von ihm registrierten.

In app / code / local / mage / Customer / 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;
}

Irgendwelche Ideen?


Wenn Sie sich von einer Site aus anmelden, melden Sie sich dann automatisch auf unserer Site an?
Amit Bera

Ich bin mir nicht sicher, ob ich deine Frage verstehe. Der Benutzer sollte angemeldet sein und auf die von ihm registrierte Website umleiten. Nicht beide Websites
Zekia

Angenommen, der Kunde registriert sich auf Website A. Kunde Versuchen Sie, sich von Website B aus anzumelden. Dann sollte der Kunde mit qutologin auf Website A auf WebsiteA umleiten. Recht?
Amit Bera

Ja, das ist richtig
Zekia

Antworten:


10

Zunächst müssen Sie einige Änderungen an der Einstellung vornehmen.

Teilen Sie Kundenkonten zwischen mehreren Websites

Sie sollten diese Funktion hier konfigurieren : System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Stellen Sie diese Einstellung auf Global ein, um jeden Kunden für alle Websites freizugeben .

Geben Sie hier die Bildbeschreibung ein

Teilen Sie die Anmeldung zwischen Websites

Um die Sitzung beim Wechseln zwischen Stores auf verschiedenen Websites beizubehalten, aktivieren Sie "SID im Frontend verwenden" unter System> Konfiguration> Allgemein> Web :

Geben Sie hier die Bildbeschreibung ein

Benutzer zwingen, auf dieselbe Website umzuleiten, die sie registriert haben

Kunden müssen sich zwangsweise auf derselben Website anmelden, auf der sie sich registriert haben, als wir versucht haben, uns von einer anderen Website aus anzumelden .

Benutzen customer_login

Definieren Sie das Ereignis in 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> 

Beobachterklasse:

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

}

HINWEIS:

Ich habe diesen Code auf meinen MAGENTO DEMO STORE-Websites getestet.

Diese beiden Websites werden unter Verwendung des Website-Konzepts von derselben Magento-Instanz ausgeführt.

Geben Sie hier die Bildbeschreibung ein


1
Dies ist ein korrekter Weg, um dieses Problem zu behandeln. Mit dieser Methode kann ein Kunde auf Website A eine Bestellung auf Website B aufgeben. Dies kann eine Einschränkung der Projektspezifikation sein.
Franck Garnier

Richtig, es hängt von der Projektspezifikation ab
Amit Bera

Ist es möglich zu verhindern, dass Kunden von einer anderen Website bestellen. Dies ist eine Einzelhandels- / Großhandels-Multistore-Konfiguration, daher sollten Einzelhandelskunden nicht berechtigt sein, sich auf der Großhandels-Website
anzumelden

Ja, es ist möglich
Amit Bera

Ich habe einige Fragen? Wie definieren Sie einen Kunden als Einzelhändler oder Großhändler?
Amit Bera

1

Sie können die folgende Methode für Ihre Anforderung umschreiben

unter Klasse umschreiben

Mage_Customer_Model_Session setCustomerAsLoggedIn Methode

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

Meinen Sie damit, dass ich den Code, den ich in setCustomerAsLoggedIn () gepostet habe, anstelle von login () platzieren sollte? Schreiben Sie bitte eine detailliertere Antwort.
Zekia

1

Verwenden Sie das customer_loginEreignis, um das Ändern / Umschreiben / Überschreiben von Kerndateien zu vermeiden.

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

Ihre Beobachterklasse ( /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); 
    }
}

Beachten Sie, dass Sie Kunden mit unterschiedlichen Geschäftsansichten unterschiedliche Kundengruppen zuweisen müssen.

Sie können Kundenattribute auch zuweisen und bei der Registrierung über ein ausgeblendetes Feld im Registrierungsformular festlegen, anstatt Kundengruppen zuzuweisen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.