首页 > 解决方案 > 我只想在客户登录时重定向到 Magento 页面(产品/类别等)。否则它应该重定向到客户登录页面

问题描述

当我没有登录并点击 Magento(magento2.test)的主页时,它会重定向到客户登录页面。这是绝对正确的。

但是当我点击像(http://magento2.test/men/tops-men/tees-men.html)这样的类别页面时,我会得到一个带有此错误的白屏(“502 Bad Gateway nginx/1.19 .0”)。

我正在附加相关的代码文件。

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

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

}

标签: phpmagentomagento2magento-2.3

解决方案


以下代码您可以在任何地方检查客户登录

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

从控制器

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

推荐阅读