php - 我只想在客户登录时重定向到 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;
}
}
解决方案
以下代码您可以在任何地方检查客户登录
$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
}
推荐阅读
- r - R Shiny 服务器变量定义。修改后的值不反映
- objective-c - 应用所选图像时 UITabBarButton 索引发生变化
- java - 无法在docker中将springboot连接到mysql
- javascript - 从javascript中的嵌套数组中过滤数组
- azure - 更改运行 Azure 容器实例的端口
- javascript - Project Euler 8. 系列中最大的产品
- javascript - 使用 JavaScript 隐藏单选按钮的文本
- oracle - Jenkins 容器:Groovy 脚本因 jbdc 异常而失败
- javascript - 无法从模式中的建议列表中带来
- excel - 尝试分配单元格值,但不断提醒“类型不匹配”