[英]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.