简体   繁体   English

只有当客户登录时,我才想重定向到 Magento 页面(产品/类别等)。否则它应该重定向到客户登录页面

[英]I want to redirect to Magento Pages (Product/Categories etc.) only if Customer is Logged in. Otherwise it Should Redirect to Customer Login page

When I'm not Logged in and hitting HomePage of Magento(magento2.test), It redirects to Customer Login Page.当我没有登录并点击 Magento(magento2.test)的主页时,它会重定向到客户登录页面。 This is Absolutely Correct.这是绝对正确的。

But When I'm hitting a Category Page like( http://magento2.test/men/tops-men/tees-men.html ), I'm getting a White Screen with this Error ("502 Bad Gateway nginx/1.19.0").但是当我点击一个类别页面时( http://magento2.test/men/tops-men/tees-men.html ),我得到一个带有此错误的白屏(“502 Bad Gateway nginx/1.19 .0")。

I'm attaching relevent code files.我正在附加相关的代码文件。

events.xml事件.xml

<?xml version='1.0'?>
   <config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='urn:magento:framework:Event/etc/events.xsd'>
       <event name='controller_action_predispatch'>
            <observer name='checklogin' instance='Vendor\Module\Observer\MyObserver'/>
       </event>
   </config>

MyObserver.php MyObserver.php

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $actionName = $observer->getEvent()->getRequest()->getFullActionName();
    $controller = $observer->getControllerAction();
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

    $openActions = array(
    'create',
    'createpost',
    'login',
    'loginpost',
    'logoutsuccess',
    'forgotpassword',
    'forgotpasswordpost',
    'resetpassword',
    'resetpasswordpost',
    'confirm',
    'confirmation'
    );

    if(!$this->_customerSession->isLoggedIn()) {
        $request = $objectManager->get('Magento\Framework\App\Request\Http');
        /** @var \Magento\Framework\UrlInterface $urlInterface */
        $urlInterface = $objectManager->get('Magento\Framework\UrlInterface');
        $url = $urlInterface->getUrl('customer/account/login');
        if(strpos($request->getPathInfo(), '/customer/account/') !== 0)
        {
            $observer->getControllerAction()
                ->getResponse()
                ->setRedirect($url);
        }
    }

    if ($controller == 'account' && in_array($actionName, $openActions)) {
        return $this;
    }

}

Following code you can check customer login or not anywhere以下代码您可以在任何地方检查客户登录

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
if($customerSession->isLoggedIn()) {
   // customer login action
}
else{
   // customer Not login action
}

From controller从 controller

$this->_objectManager->get('Magento\Customer\Model\Session');
if($customerSession->isLoggedIn()) {
   // customer login action
}

THANKS.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM