로그인하여 고객을 자신의 웹 사이트로 리디렉션


10

mutistore-multiwebsite Magento에서 사용자가 등록한 동일한 웹 사이트에 로그인하도록 강요하고 싶습니다. 웹 사이트에서 모든 로그인 양식을 사용할 수 있지만 양식은 자격 증명을 확인하여 올바른 웹 사이트로 리디렉션해야합니다.

고객의 웹 사이트를 확인하고 강제로 로그인하려고했습니다. 그래도 잘 작동하지 않습니다. 사용자는 자신이 등록한 웹 사이트가 아닌 현재 웹 사이트에 로그인합니다.

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

어떤 아이디어?


한 사이트에서 로그인하면 자동으로 사이트에 로그인 하시겠습니까?
Amit Bera

귀하의 질문을 이해하는지 잘 모르겠습니다. 사용자는 로그인하여 자신이 등록한 웹 사이트로 리디렉션해야합니다. 두 웹 사이트 모두
zekia

고객이 Website A에 등록한다고 가정하십시오. 고객 Website B에서 로그인을 시도한 후 고객은 websiteA에서 qutologin을 사용하여 WebsiteA로 경로 재지 정해야합니다. 권리?
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 DEMO STORE 웹 사이트에서이 코드를 테스트했습니다.

이 두 웹 사이트는 website concept을 사용하여 동일한 magento 인스턴스에서 실행 중입니다.

여기에 이미지 설명을 입력하십시오


1
이 문제를 처리하는 올바른 방법입니다. 그러나이 방법을 사용하면 웹 사이트 A의 고객이 웹 사이트 B에 주문할 수 있습니다. 이는 프로젝트 사양에서 제한 될 수 있습니다.
Franck Garnier

맞습니다. 프로젝트 사양에 따라 다릅니다.
Amit Bera

고객이 다른 웹 사이트에서 주문하는 것을 방지 할 수 있습니까? 소매 / 도매
멀티 스토어

예, 가능합니다
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;
}

login () 대신 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.