গ্রাহক ম্যাজেন্টো 2 এ লগ ইন করেছেন কিনা তা কীভাবে পরীক্ষা করবেন?


64

গ্রাহক মাগ্যান্টো 2 এ লগ ইন করেছেন কিনা তা কীভাবে সন্ধান করবেন

গ্রাহক যদি লগ ইন থাকে তবে সেশন থেকে গ্রাহকের ডেটা কীভাবে পাবেন?


এখানে উল্লিখিত কোনও সমাধানই আমার পক্ষে কাজ করেনি। @ রাকেশ: আপনার পক্ষে এটি কীভাবে কাজ করেছে তা আপনি ভাগ করে নিতে পারেন?
ইপ্সিতা রাউত

মনে রাখবেন যে যদি আপনাকে কখনও কোনও ম্যাজেন্টো জেএস মডিউল ( text/x-magento-init) থেকে লগ ইন করা স্থিতি পরীক্ষা করতে হয় তবে আপনি অবজেক্টম্যানেজার ইনস্ট্যান্টেশন এড়িয়ে মডিউলটির কনফিগার অবজেক্টে স্থিতিটি পাস করে কিছুটা ওভারহেড সংরক্ষণ করতে পারেন এবং পরিবর্তে লগইন লিংকের জন্য জিজ্ঞাসা করতে পারেন জেএস মডিউলটির মধ্যে যেমন,var isLoggedIn = $('.authorization-link > a').attr('href').indexOf('/login')<0;
06

@ রাকেশ, কাউল আপনি দয়া করে এগুলি পরীক্ষা করুন, magento.stackexchange.com/questions/185994/… ,, magento.stackexchange.com/questions/186036/…
Jsparo30

1
নীচের লাইনটি কি করছে? var isLoggedIn = $ ('। অনুমোদন-লিংক> এ')। অ্যাট্রি ('href')।
জাইসা

উত্তর:


62

কোড অনুসরণ করে আপনি কোথাও নয় গ্রাহক লগইন চেক করতে পারেন

$ অবজেক্টম্যানেজার = \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ অবজেক্ট ম্যানেজার :: getInstance ();
$ গ্রাহকসেশন = $ অবজেক্ট ম্যানেজার-> পান ('ম্যাজেন্টো \ গ্রাহক \ মডেল \ সেশন');
যদি ($ গ্রাহকসেশন-> লোগডইন ()) {
   // গ্রাহক লগইন অ্যাকশন
}

নিয়ামক থেকে

$ পর্যন্ত এই ->: _ objectManager-> পেতে ( 'Magento \ গ্রাহক \ মডেল \ সেশন');
যদি ($ গ্রাহকসেশন-> লোগডইন ()) {
   // গ্রাহক লগইন অ্যাকশন
}

1
অবশ্যই এটি সর্বাধিক সুস্পষ্ট সমাধান এবং আমি এটি প্রথমবার নিযুক্ত করেছি, তবে তখন আমি লক্ষ্য করেছি যে গ্রাহক সেশনটি এখনও শুরু করা হয়নি যখন এটি সঠিকভাবে কাজ করে না, তাই আমি একটি কম স্পষ্ট কিন্তু আরও টেকসই সমাধান পেয়েছি।
Mage2.PRO

11
কারও সরাসরি অবজেক্টম্যানেজার ব্যবহার করা উচিত নয়। সেশন মডেলের জন্য কেবল অবজেক্টফ্যাক্টরি উত্পন্ন কোডটি ইনজেক্ট করুন।
CarComp

6
দয়া করে আপনার উত্তরে অন্য উত্তরগুলি অনুলিপি করবেন না।
মারিয়াস

6
এটিই "ভুল" উপায়, ডিজিটাল পিয়ানিজমে রাফেল থেকে দেওয়া উত্তরটি দৃth়
লরেঞ্জো

1
আপনি যদি পুরো পৃষ্ঠার ক্যাশে সক্ষম করে থাকেন এবং আপনি এটি ব্লক / টেমপ্লেটে কল করেন তবে গ্রাহক সেশন সর্বদা খালি ফিরে আসবে বলে এটি কাজ করে না। পরিবর্তে এটি পরীক্ষা করতে HTTP প্রসঙ্গ ব্যবহার করুন।
লিও

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কি?
অ্যান্ড্রিয়া

@ আন্ড্রিয়া ভালভাবে নির্ভর করে এবং প্রতিটি ক্ষেত্রে এটি আলাদা। সে কারণেই আমি আমার উত্তরে জেনেরিক শ্রেণির পাথের নামগুলি ব্যবহার করেছি
11:58

আমার নির্ধারিত কাস্টম ব্লক রয়েছে 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। আমার কীভাবে `<অগ্রাধিকার ... /> ট্যাগ ব্যবহার করা উচিত?
অ্যান্ড্রিয়া

-> isLoggedin () পদ্ধতিটি আমার পক্ষে কাজ করে না। আমি জানি না তবে এটি কখনই ফেরায় না যে গ্রাহক লগইন হয়েছে এবং এটি আসলে! এটি লগ ইন হয়েছে (আমি লগ ইন করছি)
ভ্লাদিমির দেশপোটোভিচ

@ ভ্লাদিমিরডেস্পোটোভিচ আপনি কি বিকল্প পদ্ধতি পরীক্ষা করেছেন?
রাফেল ডিজিটাল পিয়ানিজমে

31

এটা মাধ্যমে Magento\Framework\App\Http\Contextবা মাধ্যমে সম্ভব Magento\Customer\Model\Session। তবে ফলাফল আলাদা হতে পারে:

  • এইচটিটিপি প্রসঙ্গটি গ্রাহক সেশনের চেয়ে আগে শুরু করা হয়েছিল (তবে উভয়ই অ্যাকশন কন্ট্রোলারে সূচনা হওয়ার কারণে এটি কোনও ব্যাপার নয়)
  • যখন PageCacheমডিউল (উৎপাদন সম্ভবত সবসময়) চালু থাকে, তখন মনে রাখবেন যে যত তাড়াতাড়ি বিন্যাস প্রজন্ম শুরু, গ্রাহক অধিবেশন দ্বারা সাফ করা হবে রাখা \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXmlসব ক্যাশেবেল পেজ। এর অর্থ হ'ল আপনি যদি এখন গ্রাহক এইচটিটিপি প্রসঙ্গে লগ ইন করেছেন কিনা তা পরীক্ষা করে দেখুন, এটি এখনও 'হ্যাঁ' বলবে, তবে গ্রাহক ডেটা গ্রাহক সেশনে আর উপলভ্য হবে না। সুতরাং গ্রাহক সেশনে ডেটা অ্যাক্সেস করার চেষ্টা করার আগে ডাবল চেক করা প্রয়োজন। এটি সহজেই ব্লকের মধ্যে ঘটতে পারে, তবে অ্যাকশন কন্ট্রোলারটিতে এটি অসম্ভব, যেহেতু আপনি নিজে নিজে সেখানে বিন্যাস তৈরি করবেন বলে আশা করা হচ্ছে না, এটি অ্যাকশন কন্ট্রোলারের উদাহরণস্বরূপ ফেরৎ দেওয়ার পরে তৈরি করা হবেResultInterface

পেজক্যাশ চালু থাকাকালীন বর্ণিত অসঙ্গতিগুলির যে কোনও ঝুঁকি দূর করতে, গ্রাহক সেশনটি ব্যবহারের বিষয়টি বিবেচনা করুন, যদি এটি ইতিমধ্যে শুরু করা হয় (অ্যাকশন নিয়ন্ত্রকদের ক্ষেত্রে সত্য)। অন্যথায় HTTP প্রসঙ্গ ব্যবহার করুন।


পেজ ক্যাশে সক্ষম করার জন্য দুর্দান্ত ইঙ্গিত,
থ্যাঙ্কস

3
@ অ্যালেক্স আমি নীচে কোড ব্যবহার করছি $ গ্রাহকসেশন = $ অবজেক্টম্যানেজার-> পান ('ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ এইচটিটিপি \ প্রসঙ্গ'); L isLoggedIn = $ গ্রাহকসেশন-> getValue (\ ম্যাজেন্টো \ গ্রাহক \ মডেল \ প্রসঙ্গ :: CONTEXT_AUTH); তবে ক্যাশে সক্ষম হওয়ার কারণে এটি লগ ইন হওয়া গ্রাহককে সাইন আউটের পরিবর্তে সাইন ইন বিকল্পটি দেখায়। আমি কীভাবে এটি ঠিক করব?
নীতেশ

এই বিড়াল আমাদের গাধা, ধন্যবাদ। আপনার উত্তরের আরও মনোযোগ দরকার :-) উত্পাদনে সক্ষম হওয়া ক্যাশে সেশনটিকে কঠিন করে তোলে। আপনি যদি কাস্টম ম্যাজেন্টো প্লাগইন লিখছেন তবে রুটের এক্সএমএল ফাইলটিতে ক্যাশেবল = মিথ্যা রাখুন।
লাইগামার

2
কেন আপনাকে ক্যাচেবল = মিথ্যা রাখতে হবে?
LucScu

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
আপনার কখনই সরাসরি অবজেক্টম্যানেজার ব্যবহার করা উচিত নয়
7:14

হ্যাঁ, একমত অবজেক্টম্যানেজার যাওয়ার উপায় নয়। ক্লাস কনস্ট্রাক্টারে গ্রাহকফ্যাক্টরি ইনজেকশন করুন।
কারকম্প

উপরের সমাধানটি আমার পক্ষে কাজ করে না
ইপ্সিতা রাউট

@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()প্রসঙ্গটি ব্যবহার করে আমি কীভাবে কল করতে পারি , কারণ আমি যদি সেশনটি ব্যবহার করি তবে সমস্ত পৃষ্ঠার জন্য কাজ করছে না।
জর্জ জর্জে

যদি পুরো পৃষ্ঠা ক্যাশে সক্ষম করা থাকে তবে এটি সঠিক উত্তর। আপনি প্রথমে
গ্রাহকতা

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 এ কাজ করে নি।
thdoan

8

সম্পূর্ণ পৃষ্ঠাগুলি ক্যাশে এবং বার্নিশটি প্রোডাকশন মোডে সক্ষম করে ম্যাগাঙ্কো ভি 2.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"এই ব্লকের জন্য এক্সএমএল লেআউট আছে , তবে বার্নিশ এখনও এটি স্পষ্টতই ক্যাশে করছে। এটি কোনও বাগ কিনা বা না তা নিশ্চিত নন তবে নকউট আউট করার পক্ষে এটি একটি ভাল উপায়। একমাত্র ক্ষতিটি হ'ল কেও বাইন্ডিংয়ের কারণে সাইন ইন / আউট লিঙ্কটি প্রদর্শিত হওয়ার আগে কিছুটা বিলম্ব হয়।
thdoan

6

সেখানে অনেকগুলি উত্তর রয়েছে যা এই জাতীয় কিছু দেয় ...

ওবিজেট ম্যানেজার লড করুন ক্লাস মডেল ডিও স্টুফ করুন

এটি Magento2.0 তে ব্যবহার করার জন্য WRONG পদ্ধতি। ২.০-তে, অটো উত্পাদিত অবজেক্ট কারখানাগুলি যাওয়ার উপায় the আপনি এগুলি প্রায় কোনও ক্লাসে আপনার কনস্ট্রাক্টরে ইনজেক্ট করতে পারেন এবং সেগুলি ব্যবহার করতে পারেন। উদাহরণ:

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
thdoan

সঠিক। আমি সাধারণত এগুলিকে শীর্ষে ঘোষণা করি, কেবলমাত্র আমার পদ্ধতিগুলি কোনও বিশাল জগাখিচুড়ি মত দেখাচ্ছে না :)
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

এটি কেবল তখনই কাজ করে যদি ক্যাশে সক্ষম-ক্যাশে অক্ষম থাকে।
জয়

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

ব্যবহারকারীর লগ ইন হয়েছে কিনা তা আমাকে পরীক্ষা করে দেখতে হবে। তবে নীচের কোডটি কেবল অক্ষম ক্যাশে in অবজেক্টম্যানেজার = \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ অবজেক্টম্যানেজার :: getInstance () এ কাজ করে; $ গ্রাহকসেশন = $ অবজেক্ট ম্যানেজার-> তৈরি করুন ('ম্যাজেন্টো \ গ্রাহক \ মডেল \ সেশন'); যদি ($ গ্রাহকসেশন-> #LoggedIn ()) {// কোড}
জয়

ক্যাশে সক্ষম করার ক্ষেত্রে: এটি কেবল হোম-পৃষ্ঠা এবং সাইটের অন্যান্য পৃষ্ঠাগুলিতে নয় কাস্টম-ড্যাশবোর্ড পৃষ্ঠাগুলিতে কাজ করে। আমার প্রশ্ন: magento.stackexchange.com/q/177964/29175
জয়

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

পিটিএইচএমএল ফাইলে উপরের কোডটি ব্যবহার করার জন্য আপনি এইভাবে লোগডইন () ফাংশনটি কল করতে পারেন:

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

আশা করি এই সাহায্য ধন্যবাদ।


হাই @ শুভধাম, এটি কাজ করছে না ..
জাফর পিনজার

এটি একটি ঝরঝরে সমাধান। ধন্যবাদ
বাইটগুলি জিজ্ঞাসা করুন

হ্যাঁ ধন্যবাদ আশা করি এটি আপনাকে সহায়তা করবে।
শুভম খানদেলওয়াল

2

আমি সেরা সমাধান পেয়েছি। এটি গ্রাহকের প্রমাণীকরণের উপর ভিত্তি করে । কিছু কেস গ্রাহক সেশন কাজ করে না, তবে প্রতিবার আমার সমাধান কাজ করবে work এর কটাক্ষপাত করা যাক.

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

ধন্যবাদ।


1

বর্তমান কাজ সমাধান (আইএমএইচও)

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

আপনি যদি লগ ইন করা গ্রাহককে চেক করতে চান তবে এই কোডটি পিএইচটিএমএল ফাইলগুলিতে ব্যবহার করুন,

$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সরাসরি ব্যবহার করা উচিত নয় এবং কোনও টেমপ্লেটে আপনার কখনও এই ধরণের কোড ব্যবহার করা উচিত নয়। এটি পরিচালনা করতে আপনার ব্লক শ্রেণিতে কার্যকারিতা তৈরি করা উচিত।
ওচেম

একবার আপনি কীভাবে এটি সঠিকভাবে করতে হয় তা জানার পরে আপনি কীভাবে অন্য কোনও উপায়ে এটি পরিচালনা করতে পারেন তা অবাক করে দিয়ে যান!
কারকম্প

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

সেশন মডেল থেকে লগড স্ট্যাটাসটি আনা কার্যকর হবে না যদি আপনি ম্যাজেন্টো ডিফল্ট এফপিসি ক্যাশে সক্ষম করার পরে এটি ব্যবহার করতে চান তবে সেক্ষেত্রে আপনার পরিবর্তে সেশনফ্যাক্টরি ব্যবহার করা উচিত।

এফপিসি ক্যাচিং সক্ষম করা থাকলে সেশন শুরু করা হয় না, বিশদ: https://github.com

এটি সমাধান করার 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

আমি গুগলে পাওয়া অনেকগুলি উপায় চেষ্টা করেছিলাম কিন্তু সমাধানের কোনওটিই কাজ করে না। সুতরাং আমি মূল কার্যকারিতাটি যাচাই করেছিলাম এবং গ্রাহকটি অবজেক্ট ম্যানেজারটি ব্যবহার না করে লগ ইন করেছেন কিনা তা পরীক্ষা করতে একটি পিএইচপি ফাইল তৈরি করেছি।


            / **
         * গ্রাহক অধিবেশন
         * ওয়েব প্রযুক্তি কোড দ্বারা তৈরি মডিউল
         * বিনয় সিকরোয়ার বিকশিত
         * @var \ Magento \ ফ্রেমওয়ার্ক \ অ্যাপ \ এইচটিটিপি \ প্রসঙ্গ
         * /
        সুরক্ষিত $ অধিবেশন;

        / **
         * নিবন্ধকরণ নির্মাণকারী।
         * @ পরিমাপ প্রসঙ্গে $ প্রসঙ্গ
         * @param অ্যারে $ ডেটা
         * /
        পাবলিক ফাংশন __ কনস্ট্রাক্ট (
            প্রসঙ্গ $ প্রসঙ্গ,
                    \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ সেশন \ জেনেরিক $ সেশন,
            অ্যারে $ ডেটা
        )
        {
                    $ এটি -> _ সেশন = $ অধিবেশন;
                    প্যারেন্ট :: __ কনস্ট্রাক্ট ($ প্রসঙ্গ, $ ডেটা);
        }

            / **
         * গ্রাহকের লগইন স্থিতি পরীক্ষা করা হচ্ছে
         *
         * @ পিপি
         * @ পুনর্বার বুল
         * /
        পাবলিক ফাংশন কাস্টমার লগডইন ()
        {
            রিটার্ন (bool) $ এটি-> getCustomerId ()
                && $ এটি-> চেক কাস্টমার আইড ($ এটি-> getId ())
                && $ this-> getIsCustomerEmulated ();
        }
    }

আরো তথ্যের জন্য তা এখানে পরীক্ষা http://blog.webtechnologycodes.com/customer-loggedin-check-magento2

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.