Magento 2 में ग्राहक लॉग इन है या नहीं, इसकी जांच कैसे करें?


64

Magento 2 में ग्राहक लॉग इन है या नहीं, कैसे पता करें

यदि ग्राहक लॉग इन है तो सत्र से ग्राहक डेटा कैसे प्राप्त करें?


यहां बताए गए किसी भी समाधान ने मेरे लिए काम नहीं किया। @ राकेश: क्या आप साझा कर सकते हैं कि यह आपके लिए कैसे काम करता है?
इप्टा राउत

ध्यान रखें कि यदि आपको कभी भी Magento JS मॉड्यूल ( text/x-magento-init) के भीतर से लॉग इन स्टेटस चेक करने की आवश्यकता होती है , तो आप ObjectManager तात्कालिकता से बचने और मॉड्यूल के कॉन्फिडेंस ऑब्जेक्ट को स्टेटस पास करके, और इसके बजाय लॉगिन लिंक के लिए क्वेरी से कुछ ओवरहेड बचा सकते हैं। जेएस मॉड्यूल के भीतर, जैसे:var isLoggedIn = $('.authorization-link > a').attr('href').indexOf('/login')<0;
थूडान

@ राकेश, कूल आप कृपया इनकी जांच करें, magento.stackexchange.com/questions/185994/… ,,, magento.stackexchange.com/questions/186036/…
Jsparo30 14

1
नीचे की रेखा क्या कर रही है? var isLoggedIn = $ (') प्राधिकरण-लिंक> a')। Attr ('href')। indexOf ('/ login') <0;
जयसा

लिंक की जाँच करें, rakeshjesadiya.com/…
राकेश जेसादिया 17

जवाबों:


62

निम्नलिखित कोड आप ग्राहक लॉगिन या कहीं भी नहीं देख सकते हैं

$ ObjectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();
$ customerSession = $ objectManager-> get ('Magento \ Customer \ Model \ Session');
अगर ($ customerSession-> LoggedIn ()) {
   // ग्राहक लॉगिन क्रिया
}

नियंत्रक से

$ इस -> _ objectManager-> प्राप्त ( 'Magento \ ग्राहक \ मॉडल \ सत्र');
अगर ($ customerSession-> LoggedIn ()) {
   // ग्राहक लॉगिन क्रिया
}

1
बेशक, यह सबसे स्पष्ट समाधान है, और मैंने इसे पहली बार नियोजित किया था, लेकिन फिर मैंने देखा कि जब ग्राहक सत्र अभी तक आरंभ नहीं हुआ है तो यह सही ढंग से काम नहीं करता है, इसलिए मुझे कम स्पष्ट लेकिन अधिक टिकाऊ समाधान मिला है।
Mage2.PRO

11
किसी को सीधे ऑब्जेक्टमैन का उपयोग नहीं करना चाहिए। बस सत्र मॉडल के लिए ObjectFactory उत्पन्न कोड इंजेक्ट करें।
CarComp

6
कृपया अपने उत्तर में अन्य उत्तरों की नकल न करें।
मेरियस

6
यह "गलत" तरीका है, डिजिटल पियानोवाद पर राफेल का जवाब एक है
लोरेंजो

1
यदि आपने पूर्ण पृष्ठ कैश सक्षम किया है और आप इसे ब्लॉक / टेम्प्लेट में कहते हैं, तो यह काम नहीं करता है क्योंकि ग्राहक सत्र हमेशा खाली आएगा। इसके बजाय जाँच करने के लिए http संदर्भ का उपयोग करें।
leo

84

महत्वपूर्ण अनुस्मारक: किसी को कभी भी ऑब्जेक्ट मैनेजर को सीधे कॉल नहीं करना चाहिए

इस प्रकार यहां बताया गया है कि इसे कैसे साफ किया जाए

टेम्पलेट को छोड़कर किसी भी वर्ग में

आपको पहले अपने निर्माता में निम्न वर्ग को इंजेक्ट करने की आवश्यकता है /Magento/Customer/Model/Session:

protected $_session;

public function __construct(
    ...
    \Magento\Customer\Model\Session $session,
    ...
) {
    ...
    $this->_session = $session;
    ...
}

फिर अपनी कक्षा में आप निम्नलिखित कॉल कर सकते हैं:

if ($this->_session->isLoggedIn()) {
    // Customer is logged in 
} else {
    // Customer is not logged in
}

एक टेम्पलेट में

इसे टेम्प्लेट में थोड़ा और काम करने की आवश्यकता होती है क्योंकि आपको उस ब्लॉक के लिए प्राथमिकता तय करनी होगी जो टेम्पलेट को साफ करने के लिए प्रस्तुत करता है:

<preference for="Block\That\Renders\The\Template"
            type="Vendor\Module\Block\Your\Custom\Block" />

फिर अपने कस्टम ब्लॉक कॉन्ट्रैक्टर में आपको किसी भी वर्ग के लिए उसी निर्भरता इंजेक्शन का पालन करने की आवश्यकता है (ऊपर समझाया गया है)।

यहां अतिरिक्त कदम की जाँच करने के लिए एक ग्राहक में हो या ना किया गया है या नहीं एक सार्वजनिक विधि है कि अपने खाके में इस्तेमाल किया जा सकता बनाने के लिए है

public function isCustomerLoggedIn()
{
    return $this->_session->isLoggedIn();
}

फिर अपने टेम्पलेट में आप कॉल कर सकते हैं:

if ($block->isCustomerLoggedIn()) {
    // Customer is logged in
} else {
    // Customer is not logged in
}

वैकल्पिक यदि ग्राहक सत्र अभी तक आरंभ नहीं हुआ है

ऐसा करने का एक और तरीका है जिसका अर्थ है Magento\Framework\App\Http\Contextइसके बजाय का उपयोग करनाMagento/Customer/Model/Session

फिर आप यह जांचने के $this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)बजाय कॉल कर सकते हैं $this->_session->isLoggedIn()कि ग्राहक लॉग इन है या नहीं।

हालाँकि यह विधि आपको अलग परिणाम दे सकती है , मेरा सुझाव है कि आप अधिक जानकारी के लिए इस महान उत्तर को पढ़ें: https://magento.stackexchange.com/a/92133/2380


<preference ... />कस्टम थीम के भीतर टैग कहां रखा जाना चाहिए ? वास्तव में Block\That\Renders\The\Templateऔर क्या हैं Vendor\Module\Block\Your\Custom\Block?
एंड्रिया

@ अच्छी तरह से यह निर्भर करता है और यह प्रत्येक मामले के लिए अलग है। इसीलिए मैंने अपने उत्तर में जेनेरिक क्लास पाथ के नाम इस्तेमाल किए
राफेल एट डिजिटल पियानिज़्म

मेरे पास एक कस्टम ब्लॉक है जिसे class Html extends \Magento\Framework\View\Element\Templateमैं कंस्ट्रक्टर में सत्र ऑब्जेक्ट को इंजेक्ट कर सकता हूं। मैं अपने कस्टम विषय में इस तरह से इस लेआउट का उपयोग करता हूं (लेआउट xml फ़ाइलों से) <block class="Vendor\ThemeName\Block\Html" template="Vendor_ModuleName::html/my-custom-template.phtml"/>:। मैं टेम्प्लेट फ़ाइल के भीतर लॉग इन उपयोगकर्ता की जांच करना चाहूंगा my-custom-template.phtml। मुझे preference <वरीयता ... /> टैग का उपयोग कैसे करना चाहिए?
एंड्रिया

मेरे लिए काम नहीं करता है -> Loggedin () विधि। मुझे पता नहीं क्यों लेकिन यह कभी नहीं लौटता है कि ग्राहक लॉग इन है, और यह वास्तव में है! यह लॉग इन है (मैं लॉग इन हूं)।
व्लादिमीर डेस्पोटोविक

@VladimirDespotovic आपने वैकल्पिक विधि का परीक्षण किया?
राफेल डिजिटल पियानोवाद

31

यह Magento\Framework\App\Http\Contextया के माध्यम से संभव है Magento\Customer\Model\Session। हालाँकि, परिणाम अलग हो सकता है:

  • HTTP संदर्भ ग्राहक सत्र की तुलना में पहले प्रारंभ किया गया है (लेकिन इससे कोई फर्क नहीं पड़ता कि दोनों को कार्रवाई नियंत्रकों में आरंभीकृत किया गया है)
  • जब PageCacheमॉड्यूल चालू होता है (शायद हमेशा उत्पादन पर), तो ध्यान रखें कि जैसे ही लेआउट पीढ़ी शुरू हो जाती है, ग्राहक सत्र को \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXmlसभी उपलब्ध पृष्ठों पर साफ कर दिया जाएगा । इसका मतलब यह है कि यदि आप अब चेक करते हैं कि क्या ग्राहक HTTP संदर्भ के माध्यम से लॉग इन किया गया है, तब भी यह 'हां' कहेगा, लेकिन ग्राहक डेटा अब ग्राहक सत्र में उपलब्ध नहीं होगा। इसलिए ग्राहक सत्र में डेटा एक्सेस करने का प्रयास करने से पहले डबल चेक आवश्यक है। यह आसानी से ब्लॉक में हो सकता है, जबकि एक्शन कंट्रोलर में संभावना नहीं है क्योंकि आपको मैन्युअल रूप से लेआउट उत्पन्न करने की उम्मीद नहीं है, यह एक्शन कंट्रोलर रिटर्न इंस्टेंस के बाद उत्पन्न होगाResultInterface

PageCache पर जब वर्णित विसंगतियों के किसी भी जोखिम को खत्म करने के लिए, ग्राहक सत्र का उपयोग करने पर विचार करें, यदि यह पहले से ही आरंभिक है (कार्रवाई नियंत्रकों के लिए सही है)। अन्य HTTP संदर्भ का उपयोग करें।


PageCache के लिए महान संकेत, thx
LucScu

3
@ मैं नीचे दिए गए कोड $ customerSession = $ objectManager-> get ('Magento \ Framework \ App \ Http \ Context') का उपयोग कर रहा हूं; $ isLoggedIn = $ customerSession-> getValue (\ Magento \ Customer \ Model \ Context :: CONTEXT_AUTH); लेकिन कैश सक्षम होने के कारण यह ग्राहक में लॉग इन करने के लिए साइन आउट के बजाय साइन इन विकल्प दिखा रहा है। मुझे इसे कैसे ठीक करना चाहिए?
नितेश

इस बिट हमें गधा में, धन्यवाद। आपके उत्तर पर अधिक ध्यान देने की आवश्यकता है :-) उत्पादन में सक्षम किया जा रहा कैश सत्र को मुश्किल बनाता है। यदि आप कस्टम Magento प्लग इन लिख रहे हैं, तो मार्ग की XML फ़ाइल में कैशलेस = गलत डालें।
21

2
आपको कचौड़ी क्यों डालनी है = झूठी?
लुकस्कू

15
/** @var \Magento\Framework\App\ObjectManager $om */
$om = \Magento\Framework\App\ObjectManager::getInstance();
/** @var \Magento\Framework\App\Http\Context $context */
$context = $om->get('Magento\Framework\App\Http\Context');
/** @var bool $isLoggedIn */
$isLoggedIn = $context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);

तो कस्टमर कैसे लॉगिन @ Mage2.PRO है?
xanka

8
आपको कभी भी
ऑब्जेक्ट मैनजर का

हां, मान गए। ऑब्जेक्टमैनगर जाने का रास्ता नहीं है। क्लास कंस्ट्रक्टर में CustomerFactory को इंजेक्ट करें।
CarComp

उपरोक्त समाधान मेरे लिए
Ipsita Rout

@lpsita मुझे बताएं कि क्या आपके पास यह मुद्दा है? मैंने इसे ठीक कर लिया :)
जय

10

इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया। कुछ पृष्ठ लॉग इन प्रतीत होंगे, लेकिन अन्य नहीं होंगे। ऐसा लगता है कि यह बग है:

https://github.com/magento/magento2/issues/3294

मैंने एक सहायक बनाया, जिसे मैं अपने टेम्प्लेट में कॉल कर सकता हूं:

<?php
namespace MyVendor\MyModule\Helper;

use Magento\Framework\App\Helper\AbstractHelper;

/**
 * Created by Carl Owens (carl@partfire.co.uk)
 * Company: PartFire Ltd (www.partfire.co.uk)
 **/
class Data extends AbstractHelper
{
    /**
     * @var \Magento\Framework\App\Http\Context
     */
    private $httpContext;

    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\App\Http\Context $httpContext
    ) {
        parent::__construct($context);
        $this->httpContext = $httpContext;
    }

    public function isLoggedIn()
    {
        $isLoggedIn = $this->httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
        return $isLoggedIn;
    }
}

तब मैं अपने टेम्पलेट्स में सहायक का उपयोग कर सकता था जैसे:

<?php
$helper = $this->helper('MyVendor\MyModule\Helper\Data');

if ($helper->isLoggedIn()) {
    //show something
}

यह सच है, एकमात्र कोड जिसने मुझ पर काम किया है वह आपका है। धन्यवाद!
जॉर्ज जॉर्ज

मैं ->getCustomer()->getName()संदर्भ का उपयोग करके कैसे कॉल कर सकता हूं , क्योंकि यदि मैं सत्र का उपयोग करता हूं तो सभी पृष्ठों के लिए काम नहीं कर रहा हूं।
जॉर्ज जॉर्ज

यदि पूर्ण पृष्ठ कैश सक्षम है तो यह सही उत्तर है। आप पहले ग्राहक की जांच कर सकते हैं और यदि वह गलत है तो आप ऐसा कर सकते हैं
कॉम्पैक्ट 23

9

टेम्प्लेट में उपयोगकर्ता को लॉग इन करने के लिए, आप बस एक सिंगल लाइन में हेल्पर को कॉल कर सकते हैं:

<?php $_loggedin = $this->helper('Magento\Checkout\Helper\Cart')->getCart()->getCustomerSession()->isLoggedIn(); ?>

<?php if( $_loggedin ) : ?>

     <div><!-- add your code --></div>

<?php endif; ?>

ऑब्जेक्टमैनगर का उपयोग किए बिना अच्छा समाधान।
नितेश

2
यह v2.1.5 में एफपीसी और वार्निश के उत्पादन मोड में सक्षम होने के साथ काम नहीं किया।
थुडन

8

यहाँ कोई भी समाधान मेरे लिए मज़बूत रूप से Magento v2.1 में काम नहीं किया, जिसमें फुल पेज कैश और वार्निश उत्पादन मोड में सक्षम है। मुझे आखिरकार एक समाधान मिला जिसने विचार करने के बाद सभी कैशिंग सक्षम होने के साथ 100% समय काम किया vendor/magento/module-theme/view/frontend/templates/html/header.phtml। यहाँ मेरा समाधान है, जो उपयोगकर्ता के लॉग आउट होने पर "साइन इन" लिंक दिखाता है और जब उपयोगकर्ता लॉग इन होता है तो "साइन आउट" लिंक।

<li data-bind="scope: 'customer'">
  <!-- ko if: customer().firstname  -->
  <a href="<?php echo $this->getUrl('customer/account/logout'); ?>" style="display:none;" data-bind="style: {display:'inline'}"><?php echo __('Sign Out') ?></a>
  <!-- /ko -->
  <!-- ko ifnot: customer().firstname  -->
  <a href="<?php echo $this->getUrl('customer/account/login'); ?>" style="display:none;" data-bind="style: {display:'inline'}"><?php echo __('Sign In') ?></a>
  <!-- /ko -->
  <script type="text/x-magento-init">
  {
    "*": {
      "Magento_Ui/js/core/app": {
        "components": {
          "customer": {
            "component": "Magento_Customer/js/view/customer"
          }
        }
      }
    }
  }
  </script>
</li>

अद्यतन: v2.1.5 के बाद से यह समाधान अब विश्वसनीय नहीं है। समस्या के समाधान के लिए अंक 9156 देखें ।


यह एक अच्छा उपाय है। हालांकि आप लेआउट फ़ाइल में cachable = "false" का उपयोग कर सकते हैं।
दिनेश यादव

मेरे पास cachable="false"इस ब्लॉक के लिए लेआउट एक्सएमएल है, लेकिन वार्निश अभी भी इसे स्पष्ट रूप से कैशिंग कर रहा है। सुनिश्चित नहीं है कि यह बग है या नहीं, लेकिन नॉकआउट इसे दरकिनार करने का एक अच्छा तरीका है। केवल नकारात्मक पक्ष यह है कि KO बाइंडिंग के कारण साइन इन / आउट लिंक से पहले थोड़ा विलंब होता है।
थुडू

6

वहाँ बहुत सारे उत्तर हैं जो कुछ इस तरह से चलते हैं ...

OBJECT MANAGER LOAD UP CLASS MODEL DO STUFF प्राप्त करें

यह Magento2.0 में उपयोग करने के लिए गलत पद्धति है। 2.0 में, ऑटो उत्पन्न वस्तु कारखाने जाने का रास्ता है। आप उन्हें लगभग किसी भी वर्ग में अपने निर्माता में इंजेक्ट कर सकते हैं और उनका उपयोग कर सकते हैं। उदाहरण:

public function __construct(
            Context $context,
            CollectionFactory $cmspageCollectionFactory,
            array $data = [],
            CustomerFactory $customerFactory,
            SessionFactory $sessionFactory)
        {
            parent::__construct($context, $data);
            $this->_cmspageCollectionFactory = $cmspageCollectionFactory;
            $this->customerFactory = $customerFactory;
            $this->sessionFactory = $sessionFactory;
        }

        /**
         * @return \Stti\Healthday\Model\ResourceModel\Cmspage\Collection
         */
        public function getCmspages()
        {
            // First check to see if someone is currently logged in.
            $customerSession = $this->sessionFactory->create();
            if ($customerSession->isLoggedIn()) {
                // customer is logged in;
                //$customer = $this->customerFactory->create()->get
            }

2
यदि आपको कारखानों के लिए कोई त्रुटि मिलती है, तो पूर्ण पथ का उपयोग करें, जैसे \Magento\Customer\Model\SessionFactory $sessionFactory
थुडू

सही बात। मैं आमतौर पर उन्हें शीर्ष पर घोषित करता हूं, बस इसलिए मेरे तरीके बहुत बड़ी गड़बड़ नहीं लगते हैं :)
CarComp

3

नमस्ते यहाँ जवाब मिला:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->create('Magento\Customer\Model\Session');

if ($customerSession->isLoggedIn()) {
    $customerSession->getCustomerId();  // get Customer Id
    $customerSession->getCustomerGroupId();
    $customerSession->getCustomer();
    $customerSession->getCustomerData();

    echo $customerSessionget->getCustomer()->getName();  // get  Full Name
    echo $customerSessionget->getCustomer()->getEmail(); // get Email
}

स्रोत

$customerSession = $objectManager->get('Magento\Customer\Model\Session');

बनाया गया अब ठीक काम करता है:

$customerSession = $objectManager->create('Magento\Customer\Model\Session');

4
आपको ObjectManagerसीधे प्रयोग नहीं करना चाहिए
7ochem

यह तभी काम करता है जब कैश सक्षम-कैश में अक्षम न हो।
जय

@ जय, यह मेरे लिए विकास और उत्पादन में भी काम करता है। कृपया आप मुझे इस मुद्दे को पुन: पेश करने के लिए कदम भेज सकते हैं?
मनीष

मुझे यह जांचना होगा कि उपयोगकर्ता लॉग इन है या नहीं। लेकिन नीचे कोड केवल निष्क्रिय कैश में काम करता है $ objectManager = \ Magento \ फ्रेमवर्क \ App \ ObjectManager :: getInstance (); $ ग्राहक सत्र = $ objectManager-> create ('Magento \ Customer \ Model \ Session'); if ($ customerSession-> isLoggedIn ()) {// CODE}
जय

कैश्ड एनेबल में: यह केवल कस्टम-डैशबोर्ड पेजों पर ही काम करता है न कि होम-पेज और साइट के अन्य पेजों में। मेरा सवाल: magento.stackexchange.com/q/177964/29175
Jai

3

यह भी समाधान में से एक है "चेक करें कि ग्राहक Magento2 में लॉग इन है या नहीं"

कोड के नीचे आज़माएं:

 $om = \Magento\Framework\App\ObjectManager::getInstance();
 $context = $om->get('Magento\Framework\App\Http\Context');
 $isLoggedIn = $context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
 if($isLoggedIn){
      echo "Yes Customer loggedin";
      echo "<pre>";print_r($context->getData()); 
 }

2

कोड के नीचे आज़माएं:

<?php
namespace YourCompany\ModuleName\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Customer\Model\Session $customerSession
    ) {
        $this->customerSession = $customerSession;
        parent::__construct($context);
    }

public function isLoggedIn() // You can use this fucntion in any phtml file
    {
        return $this->customerSession->isLoggedIn();
    }
}

Phtml फ़ाइल में उपरोक्त कोड का उपयोग करने के लिए आप isLoggedIn () फ़ंक्शन को कॉल कर सकते हैं:

<?php $helper = $this->helper('YourCompany\ModuleName\Helper\Data'); ?>
<?php if($helper->isLoggedIn()) : ?>
    logged in
<?php else : ?>
    not logged in
<?php endif; ?> 

आशा है कि यह मदद धन्यवाद।


हाय @ शुभम, इसका काम नहीं ..
जफ़र पिंजर

यह एक साफ समाधान है। धन्यवाद
बाइट्स

हाँ धन्यवाद आशा है कि यह आपकी मदद करता है।
शुभम खंडेलवाल

2

मुझे सबसे अच्छा समाधान मिला है। यह ग्राहक के प्रमाणीकरण पर आधारित है । कुछ मामला ग्राहक सत्र काम नहीं कर रहा था, लेकिन हर बार मेरा समाधान काम करेगा। चलो एक नज़र डालते हैं।

<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Block\Account\AuthorizationLink');
if ($customerSession->isLoggedIn() == true) {
//your code.
} ?>

धन्यवाद।


1

वर्तमान काम किया समाधान (IMHO)

<?php

namespace My\Module\Helper\Data;

/**
 * @var \Magento\Framework\ObjectManagerInterface
 */
protected $objectManager;

/**
 * @var \Magento\Customer\Model\SessionFactory
 */
protected $customerSession;

/**
 * Class Data
 */
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * @param \Magento\Framework\ObjectManagerInterface $objectManager
     */
    public function __construct(
         \Magento\Framework\ObjectManagerInterface $objectManager
    )
    {
        $this->objectManager   = $objectManager;
        $this->customerSession = $this->objectManager->create('Magento\Customer\Model\SessionFactory')->create();
    }

    /**
     * @return \Magento\Customer\Model\SessionFactory
     */
    public function getCustomerSession()
    {
       return $this->customerSession;     
    }

    /**
     * @return bool
     */
    public function isCustomerLoggedIn()
    {
        return ($this->getCustomerSession()->isLoggedIn()) ? true : false;
    }
}

1

यदि आप लॉग इन किए गए ग्राहक की जांच करना चाहते हैं या नहीं, तो इस कोड का उपयोग phtml फाइलों में करें,

$om = \Magento\Framework\App\ObjectManager::getInstance();
$appContext = $om->get('Magento\Framework\App\Http\Context');
$isLoggedIn = $appContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
if($isLoggedIn) {
    /** LOGGED IN CUSTOMER, this should work in template   **/
}

2
आपको कभी भी ObjectManagerसीधे उपयोग नहीं करना चाहिए और आपको इस प्रकार के कोड का उपयोग कभी भी टेम्पलेट में नहीं करना चाहिए। इसे प्रबंधित करने के लिए आपको अपने ब्लॉक वर्ग में कार्यक्षमताओं का निर्माण करना चाहिए।
7ochem

एक बार जब आप यह जान लेते हैं कि इसे सही तरीके से कैसे किया जाए, तो आपको आश्चर्य होता है कि आप इसे कभी भी दूसरे तरीके से कैसे मैनेज करते हैं!
CarComp

0
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');

if($customerSession->isLoggedIn()) {

}

0

एक और जवाब:

<?php $_loggedin = $block->getLayout()->createBlock('Magento\Customer\Block\Account\AuthorizationLink')->isLoggedIn() ?>
 <?php if( $_loggedin ) : ?>
   // your code
 <?php endif; ?>

तुम क्या सोचते हो?


0

यदि आप Magento के डिफ़ॉल्ट FPC कैश को सक्षम करने के बाद इसका उपयोग करना चाहते हैं, तो उस स्थिति में सत्र मॉडल से लॉगिंग स्थिति काम नहीं करेगी, आपको इसके बजाय SessionFactory का उपयोग करना चाहिए।

FPC कैशिंग सक्षम होने पर सत्र आरंभ नहीं हुआ है, विवरण: https://github.com/magento/magento2/issues/3294#issuecomment-328464943

SessionFactoryउदाहरण के लिए, आपको इसे हल करने के लिए:

/**
* @var \Magento\Customer\Model\Session
*/
protected $_customerSessionFactory;

public function __construct(
    ....
    \Magento\Customer\Model\SessionFactory $customerSessionFactory
    ....
) 
{
    ....
    $this->_customerSessionFactory = $customerSessionFactory;
    ....
}

public function getCustomerId(){
  $customer = $this->_customerSessionFactory->create();
  echo $customer->getCustomer()->getId();
}

-1

मैंने कई तरीके Google पर ढूंढे लेकिन कोई भी समाधान काम नहीं आया। SO मैंने कोर कार्यक्षमता की जाँच की और ऑब्जेक्ट मैनेजर का उपयोग किए बिना किसी ग्राहक को लॉग इन या चेक करने के लिए php फ़ाइल बनाई।


            / **
         * ग्राहक सत्र
         * वेब टेक्नोलॉजी कोड द्वारा बनाया गया मॉड्यूल
         * विनय सिकरवार द्वारा विकसित
         * @var \ Magento \ Framework \ App \ Http \ Context
         * /
        संरक्षित $ सत्र;

        / **
         * पंजीकरण निर्माता।
         * @ अपरम संदर्भ $ प्रसंग
         * @ अपरम सरणी $ डाटा
         * /
        सार्वजनिक समारोह __construct (
            संदर्भ $ संदर्भ,
                    \ Magento \ Framework \ सत्र \ सामान्य $ सत्र,
            सरणी $ डेटा
        )
        {
                    $ यह -> _ सत्र = $ सत्र;
                    जनक :: __ निर्माण ($ संदर्भ, $ डेटा);
        }

            / **
         * ग्राहक लॉगिन स्थिति की जाँच करना
         *
         * @ii
         * @ बस्ट बूल
         * /
        सार्वजनिक समारोह। ग्राहक है। ()
        {
            वापसी (बूल) $ यह-> getCustomerId ()
                && $ यह-> checkCustomerId ($ यह-> getId ())
                &&; $ यह-> getIsCustomerEmulated ();
        }
    }

अधिक जानकारी के लिए इसे यहाँ देखें http://blog.webtechnologycodes.com/customer-loggedin-check-bagamb2

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.