Đăng nhập và chuyển hướng khách hàng đến trang web của mình


10

Trong một Magento đột biến đa trang web, tôi muốn buộc người dùng đăng nhập vào cùng một trang web mà họ đã đăng ký. Họ có thể sử dụng bất kỳ biểu mẫu đăng nhập nào, trong bất kỳ trang web nào, nhưng biểu mẫu nên kiểm tra thông tin đăng nhập của họ và chuyển hướng họ đến trang web chính xác.

Tôi đã cố kiểm tra trang web của khách hàng và buộc anh ấy đăng nhập. Nó không hoạt động khá tốt mặc dù. Người dùng được đăng nhập vào trang web hiện tại, không phải trang web mà anh ta đã đăng ký.

Trong ứng dụng / mã / cục bộ / pháp sư / Khách hàng / Phiên.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;
}

Có ý kiến ​​gì không?


Nếu bạn đăng nhập từ một trang thì tự động đăng nhập tại trang của chúng tôi?
Amit Bera

Tôi không chắc nếu hiểu câu hỏi của bạn. Người dùng nên đăng nhập và chuyển hướng đến trang web mà anh ấy đã đăng ký. Không phải cả hai trang web
zekia

Giả sử, khách hàng đăng ký tại Website A. Khách hàng đã thử đăng nhập từ Trang web B, sau đó khách hàng nên chuyển hướng đến WebsiteA bằng qutologin tại websiteA. đúng?
Amit Bera

Vâng, điều đó đúng
zekia

Câu trả lời:


10

Trước tiên, bạn cần thực hiện một số thay đổi trong cài đặt.

Chia sẻ tài khoản khách hàng giữa nhiều trang web

Bạn nên cấu hình tính năng này ở đây : System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Đặt cài đặt này thành Toàn cầu để chia sẻ mọi khách hàng với tất cả các trang web .

nhập mô tả hình ảnh ở đây

Chia sẻ đăng nhập giữa các trang web

Để giữ phiên khi chuyển đổi giữa các cửa hàng trên trang web khác nhau , hãy bật "Sử dụng SID trên Frontend" trong Hệ thống> Cấu hình> Chung> Web :

nhập mô tả hình ảnh ở đây

Buộc người dùng chuyển hướng đến cùng một trang web mà họ đã đăng ký

Khách hàng buộc phải đăng nhập vào cùng một trang web mà họ đã đăng ký khi chúng tôi cố gắng đăng nhập từ một trang web khác.

Sử dụng customer_login

Xác định sự kiện cho 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> 

Lớp quan sát viên:

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

}

GHI CHÚ:

TÔI ĐÃ KIỂM TRA MÃ SỐ NÀY trên TRANG WEB CỬA HÀNG MAGENTO DEMO CỦA TÔI.

Hai trang web này đang chạy từ cùng một ví dụ magento sử dụng khái niệm trang web.

nhập mô tả hình ảnh ở đây


1
Đây là một cách chính xác để xử lý vấn đề này. Nhưng với phương pháp này, một khách hàng trong Trang web A có thể đặt hàng trong Trang web B. Đó có thể là một hạn chế từ đặc tả dự án.
Franck Garnier

đúng, nó phụ thuộc vào đặc điểm kỹ thuật của dự án
Amit Bera

Có thể ngăn khách hàng đặt hàng từ một trang web khác. Đây là cấu hình đa tầng bán lẻ / bán buôn, vì vậy khách hàng bán lẻ không được phép đăng nhập vào trang web bán buôn
zekia 30/03/2017

vâng, nó có thể sở hữu
Amit Bera

Tôi có vài câu hỏi? Làm thế nào bạn xác định một khách hàng là nhà bán lẻ hoặc bán buôn?
Amit Bera

1

bạn có thể viết lại phương pháp dưới đây cho yêu cầu của bạn

viết lại dưới lớp

Mage_Customer_Model_Session setCustomerAsLoggedIn phương pháp

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

Bạn có nghĩa là tôi nên đặt mã tôi đã đăng trong setCustomerAsLoggedIn (), thay vì đăng nhập ()? Gửi một câu trả lời chi tiết hơn xin vui lòng.
zekia

1

Sử dụng customer_loginsự kiện để tránh thay đổi / ghi lại / ghi đè các tệp cốt lõi.

Trong cấu hình của bạn

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

Lớp người quan sát của bạn ( /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); 
    }
}

Lưu ý rằng bạn sẽ phải chỉ định các nhóm khách hàng khác nhau cho các khách hàng có quan điểm cửa hàng khác nhau.

Bạn cũng có thể chỉ định thái độ của khách hàng và đặt chúng trong khi đăng ký thông qua trường ẩn trong biểu mẫu đăng ký thay vì chỉ định nhóm khách hàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.