How to check if the customer is logged in or not in Magento 2?
There are some functionalities that we want only the logged-in customers to have access to. In order to achieve this, there must be some way to check if a customer is logged in or not.
There are two ways by which you can check if a customer is logged in or not:
1) By using Object Manager
It is always a bad practice to use ObjectManager directly.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
if($customerSession->isLoggedIn()) {
// customer login action
}
2) By Injecting Class (Dependency Injection)
As said earlier, it is one of the worst practices to use the ObjectManager directly. Therefore an alternate way to check if a user is logged in or not is by using the following code in any class except the template files:
You first need to inject the following class in your constructor:
/Magento/Customer/Model/Session
protected $_session;
public function __construct(
...
\Magento\Customer\Model\Session $session,
...
) {
...
$this->_session = $session;
...
}
Then you need to use Magento\Customer\Model\Session::isLoggedIn() to check if the customer is logged in or not.
if ($this->_session->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
Thank you for reading this article. Your feedback is welcome in the comments section, and we’re available to assist with any Magento 2 store development requirements you may have.
FAQs
To log in to the customer programmatically, retrieve the customer object using the customer ID or email using CustomerRepositoryInterface.
$customer = $this->_customerRepository->getById($customerId);
Or
$customer = $this->_customerRepository->get($customerEmail);
Next, use the Magento\Backend\Model\Auth\Session class to set the customer’s session as the current session.
$this->_authSession->setCustomerAsLoggedIn($customer);
Further, redirect the customer to the desired page – $this->_redirect(‘customer/account’);
To get customer data by using the customer’s ID, follow the below-mentioned steps –
1. Create an instance of the Magento\Customer\Api\CustomerRepositoryInterface class.
2. Next, use the getById method to retrieve customer data by ID. This method takes one argument, the customer ID, and returns a customer interface object.
3. Further, you can access the customer data using the getter methods provided by the customer interface.
To find the customer list in Magento 2 use class, follow the below-mentioned steps
1. Create an instance of the Magento\Customer\Model\ResourceModel\Customer\Collection class.$customerCollection = $this->_customerCollectionFactory->create();
2. If required, add filters or sorting to the collection by using the following code.$customerCollection->addFieldToFilter('email', ['like' => '%@example.com']);
$customerCollection->setOrder('created_at', 'DESC');
3. Next, load the collection by calling the load function.$customerCollection->load();
4. Now, iterate over the collection to get the customer data
foreach ($customerCollection as $customer)
{
echo $customer->getId() . '-' . $customer->getName();
}
To activate a customer account in Magento 2, follow the below-mentioned steps –
1. Log in to the Admin Panel and go to Stores —> Settings —> Configuration.
2. Navigate the left panel & expand Customers.
3. Next, select Login as Customer.
4. Further from the dropdown list, select –
– Yes for Enable Extension
– No for Disable Page Cache For Admin User
– Auto-Detection (default) for Set Store View to Log and tick mark Use System Value
5. Thereafter, click on Save Config.
Post a Comment
Got a question? Have a feedback? Please feel free to leave your ideas, opinions, and questions in the comments section of our post! ❤️