繁体   English   中英

Magento PHP 检查用户是否登录

[英]Magento PHP check if user is logged in

我有以下代码来查看用户是否已登录。它在客户区域(用户已登录)内工作,但在客户区域外不起作用,即使客户仍处于登录状态。

<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
if($customerSession->isLoggedIn()) { ?>
   <li class="link wishlist" data-bind="scope: 'wishlist'">
    <a <?php /* @escapeNotVerified */ echo $block->getLinkAttributes() ?>><?php echo $block->escapeHtml($block->getLabel()) ?>
        <!-- ko if: wishlist().counter -->
        <span data-bind="text: wishlist().counter" class="counter qty"></span>
        <!-- /ko -->
    </a>
</li>
<li>Hello World</li>
?>
<?php
}
else {
?>
    <li>Not logged in</li>
<?php
}
?>



<script type="text/x-magento-init">
    {
        "*": {
            "Magento_Ui/js/core/app": {
                "components": {
                    "wishlist": {
                        "component": "Magento_Wishlist/js/view/wishlist"
                    }
                }
            }
        }
    }
</script>

在 magento 1.9 中,如果要检查用户是否登录任何控制器或 phtml,则需要添加

<?php 
    if( ! Mage::getSingleton('customer/session')->isLoggedIn()){
        //not logged in
    }else{
        // logged in
    }
?>

实例化超级对象的重要部分是这个

 Mage::getSingleton('customer/session')

在 Magento 2.x PHP 检查用户是否登录(phtml 文件),您可以使用以下代码:

     $authorizationLink = $block->getLayout()->createBlock('Magento\Customer\Block\Account\AuthorizationLink');

    <?php if($authorizationLink->isLoggedIn()){
        // Customer is logged In
     }else{
        // Customer is not logged In
    } 
?>

这是因为 echo $block->getLinkAttributes()

这个块是 vendor\\magento\\framework\\View\\Element\\Html\\Link.php 并且它不是在每个页面上都被称为 $block ,所以如果你需要getLinkAttributes()你需要手动调用它。

在整个网站中检查客户是否登录

$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);

     if($isLoggedIn == 1){
     //Customer is Logged In
     }

使用以下代码检查用户是否登录:

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

if($customerSession->isLoggedIn()) 
{
 // your code
}

你不应该听所有用户告诉你使用 objectManager。 这是肮脏且性能较低的。 并且您应该始终将逻辑保留在块类中,而不是将其写入模板中。 始终将业务逻辑与视图分开。

正确的方法:

在这个例子中,我向块类\\Magento\\Checkout\\Block\\Cart\\Sidebar添加了一个新方法“isUserLoggedIn()”。

首先,我使用自己的Custom\\Module\\Block\\Cart\\Sidebar扩展该类。

<?php

namespace Custom\Module\Block\Cart;

class Sidebar extends \Magento\Checkout\Block\Cart\Sidebar
{
    private $customerSession;
    ...

    public function __construct(
        \Magento\Checkout\Model\Session $checkoutSession,   
        ...
    ) {

        $this->customerSession = $customerSession;
        ...
    }

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

现在您可以在模板中使用$block->isLoggedIn()

使用以下代码来解决您的查询。

<?php
$objectManagerlogin = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManagerlogin->get('Magento\Customer\Model\Session');
$baseurl = $objectManagerlogin->get('Magento\Store\Model\StoreManagerInterface')->getStore(0)->getBaseUrl();
?>
<?php if($customerSession->isLoggedIn()) { ?>
  <a href="<?php echo $baseurl .'customer/account/logout'; ?>">LOGOUT</a>
<?php }else { ?>
<a href="<?php echo $baseurl .'customer/account/login'; ?>">LOGIN</a>    
<?php
}
?>

暂无
暂无

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

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