লগইন করুন এবং গ্রাহককে তার ওয়েবসাইটে পুনঃনির্দেশ করুন


10

একটি মিউজিস্টোর-মাল্টিওয়েসসাইট ম্যাগেন্টোতে, আমি ব্যবহারকারীদের নিবন্ধিত একই ওয়েবসাইটে লগইন করতে বাধ্য করতে চাই। তারা যে কোনও লগইন ফর্ম, যে কোনও ওয়েবসাইটে ব্যবহার করতে পারে তবে ফর্মটির তাদের শংসাপত্রগুলি পরীক্ষা করে সঠিক ওয়েবসাইটটিতে পুনর্নির্দেশ করা উচিত।

আমি গ্রাহকের ওয়েবসাইট চেক করার চেষ্টা করেছি এবং তাকে লগ ইন করতে বাধ্য করেছি। যদিও এটি বেশ ভাল কাজ করছে না। ব্যবহারকারী বর্তমান ওয়েবসাইটে লগইন হয়ে যায়, তার নিবন্ধিতটি নয়।

অ্যাপ্লিকেশন / কোড / স্থানীয় / ম্যাজ / গ্রাহক / সেশন.এফপি

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

কোন ধারনা?


আপনি যদি একটি সাইট থেকে লগইন করেন তবে আমাদের সাইটে স্বয়ংক্রিয়ভাবে লগইন করবেন?
অমিত বেরা

আপনার প্রশ্নটি বুঝতে পেরে আমি নিশ্চিত নই। ব্যবহারকারীর লগ ইন করা উচিত এবং সে নিবন্ধিত ওয়েবসাইটটিতে পুনর্নির্দেশ করা উচিত। উভয় ওয়েবসাইট নয়
জেকিয়া

ধরা যাক, ওয়েবসাইট এ এ গ্রাহক নিবন্ধন করুন গ্রাহক ওয়েবসাইট বি থেকে লগইন করার চেষ্টা করুন, তারপরে গ্রাহককে ওয়েবসাইটএতে কুতোলজিন সহ ওয়েবসাইটএতে পুনর্নির্দেশ করা উচিত। ঠিক আছে?
অমিত বেরা

হ্যাঁ, এটি সঠিক
জেকিয়া ২

উত্তর:


10

প্রথমত, আপনাকে সেটিংয়ে কিছু পরিবর্তন করতে হবে।

একাধিক ওয়েবসাইটের মধ্যে গ্রাহক অ্যাকাউন্ট শেয়ার করুন

এই বৈশিষ্ট্যটি এখানে কনফিগার করা উচিত: System -> Configuration -> Customer Configuration -> Share Customer Accounts

সমস্ত ওয়েবসাইটে প্রতিটি গ্রাহককে ভাগ করে নেওয়ার জন্য এই সেটিংটি গ্লোবাল করুন ।

এখানে চিত্র বর্ণনা লিখুন

ওয়েবসাইটের মধ্যে লগইন ভাগ করুন

বিভিন্ন ওয়েবসাইটে স্টোরগুলির মধ্যে স্যুইচ করার সময় সেশনটি রাখতে, সিস্টেম> কনফিগারেশন> সাধারণ> ওয়েবে "ফ্রন্ট্যান্ডে এসআইডি ব্যবহার করুন" সক্ষম করুন :

এখানে চিত্র বর্ণনা লিখুন

ব্যবহারকারীদের নিবন্ধিত একই ওয়েবসাইটে পুনঃনির্দেশ করতে বাধ্য করুন

যখন আমরা অন্য কোনও ওয়েবসাইট থেকে লগইন করার চেষ্টা করেছি তখন তারা দৃ registered ়ভাবে গ্রাহকরা তাদের নিবন্ধিত একই ওয়েবসাইটে লগইন করে।

ব্যবহার customer_login

কনফিগার.এক্সএমএলে ইভেন্টটি সংজ্ঞায়িত করুন

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

}

বিঃদ্রঃ:

আমি আমার ম্যাগেন্টো ডেমো স্টোর ওয়েবসাইটগুলিতে এই কোডটি পরীক্ষা করেছি।

এই দুটি ওয়েবসাইট ওয়েবসাইট ধারণাটি ব্যবহার করে একই ম্যাজেন্টো উদাহরণ থেকে চলছে।

এখানে চিত্র বর্ণনা লিখুন


1
এই সমস্যাটি হ্যান্ডেল করার এটি একটি সঠিক উপায়। তবে এই পদ্ধতির সাহায্যে ওয়েবসাইট এ-এর কোনও গ্রাহক ওয়েবসাইট বিতে একটি অর্ডার দিতে পারেন এটি প্রকল্পের নির্দিষ্টকরণের থেকে বাধা হতে পারে।
ফ্রাঙ্ক গার্নিয়ার

ঠিক আছে, এটি প্রকল্পের নির্দিষ্টকরণের উপর নির্ভর করে
অমিত বেরা

গ্রাহকদের অন্য ওয়েবসাইট থেকে অর্ডার দেওয়া থেকে বাঁচানো কি সম্ভব? এটি খুচরা / পাইকারি মাল্টিস্টোর কনফিগারেশন, তাই খুচরা গ্রাহকদের পাইকারি ওয়েবসাইটে লগইন করার অনুমতি দেওয়া উচিত নয়
জেকিয়া

হ্যাঁ, এটি সম্ভাব্য
অমিত বেরা

আমার কিছু প্রশ্ন আছে? আপনি কীভাবে একজন গ্রাহককে খুচরা বিক্রেতা বা পাইকারকে সংজ্ঞায়িত করেন?
অমিত বেরা

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

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