Accedi e reindirizza il cliente al suo sito Web


10

In un Magento multi-sito Web mutistore, vorrei costringere gli utenti ad accedere allo stesso sito Web che hanno registrato. Potrebbero utilizzare qualsiasi modulo di accesso, in qualsiasi sito Web, ma il modulo dovrebbe controllare le proprie credenziali e reindirizzarle al sito Web corretto.

Ho provato a controllare il sito Web del cliente e a costringerlo ad accedere. Tuttavia non funziona abbastanza bene. L'utente accede al sito Web corrente, non a quello che ha registrato.

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

Qualche idea?


Se accedi da un sito, accedi automaticamente al nostro sito?
Amit Bera

Non sono sicuro di capire la tua domanda. L'utente deve accedere e reindirizzare al sito Web che ha registrato. Non entrambi i siti Web
Zekia,

Supponiamo che il cliente si registri sul sito Web A. Il cliente deve provare ad accedere dal sito Web B, quindi il cliente deve reindirizzare al sito Web A con qutologin sul sito WebA. destra?
Amit Bera

Sì, è corretto
zekia,

Risposte:


10

Innanzitutto, è necessario apportare alcune modifiche alle impostazioni.

Condividi gli account dei clienti tra più siti Web

È necessario configurare questa caratteristica qui: System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Imposta questa impostazione su Globale per condividere tutti i clienti su tutti i siti Web .

inserisci qui la descrizione dell'immagine

Condividi l'accesso tra i siti Web

Per mantenere la sessione quando si passa da un negozio a un altro sito Web , abilitare "Usa SID sul frontend" in Sistema> Configurazione> Generale> Web :

inserisci qui la descrizione dell'immagine

Forzare gli utenti a reindirizzare allo stesso sito Web che hanno registrato

Effettivamente il login dei clienti allo stesso sito Web che hanno registrato quando abbiamo tentato di accedere da un altro sito Web.

Uso customer_login

Definire l'evento 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> 

Classe di osservatori:

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

}

NOTA:

HO TESTATO QUESTO CODICE sui SITI WEB MY MAGENTO DEMO STORE.

Questo sito Web è in esecuzione dalla stessa istanza di magento utilizzando il concetto di sito Web.

inserisci qui la descrizione dell'immagine


1
Questo è un modo corretto di gestire questo problema. Ma con questo metodo, un cliente nel sito Web A può effettuare un ordine nel sito Web B. Può essere una restrizione dalle specifiche del progetto.
Franck Garnier,

giusto, dipende dalle specifiche del progetto
Amit Bera

È possibile impedire ai clienti di ordinare da un altro sito Web. Questa è una configurazione multistore al dettaglio / all'ingrosso, quindi i clienti al dettaglio non dovrebbero essere autorizzati ad accedere al sito Web all'ingrosso
zekia

sì, è possibile
Amit Bera

Ho qualche domanda? come si definisce un cliente rivenditore o grossista?
Amit Bera

1

puoi riscrivere il seguente metodo per il tuo requirment

riscrivi sotto la classe

Mage_Customer_Model_Session setCustomerAsLoggedIn metodo

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

Vuoi dire che dovrei inserire il codice che ho pubblicato in setCustomerAsLoggedIn (), anziché login ()? Pubblica una risposta più dettagliata per favore.
zekia,

1

Utilizzare l' customer_loginevento per evitare di modificare / riscrivere / sovrascrivere i file core.

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

La tua classe di osservatori ( /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); 
    }
}

Tieni presente che dovrai assegnare gruppi di clienti diversi a clienti con diverse visualizzazioni del negozio.

È inoltre possibile assegnare attibute del cliente e impostarli durante la registrazione tramite un campo nascosto nel modulo di registrazione anziché assegnare i gruppi di clienti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.