By Default Magento 2 redirects to the account dashboard page after a customer logs in. This may not be very convenient for the customers as they may loose the page which they were browsing before logging in. But Magento 2 provides a very easy way to avoid this situation. If you want to keep customers on the same page after logging in, you need to change the following setting in admin panel.
1. Go to Admin -> Stores -> Settings -> Configuration -> Customers -> Customer Configuration
2. Now in the Login Options section change the Redirect Customer to Account Dashboard after Logging in
settings to ‘No’
3. Clear the cache
This should be enough.
Redirect Using Custom Code
If you are building a custom module and want to keep customer on your module page after logging in, you can do so by this simple code. You just need to add referer
parameter to the customer login url. The value of referer
is the base_64
encoded hash of the redirect URL. Here is the sample code to achieve this:
<?php namespace <namespace>\<Module>\Controller; use Magento\Framework\Controller\ResultFactory; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\UrlInterface; class Index extends Action { protected $urlInterface; /** * @param Context $context * @SuppressWarnings(PHPMD.ExcessiveParameterList) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ public function __construct( Context $context, UrlInterface $urlInterface ) { $this->context = $context; $this->resultFactory = $context->getResultFactory(); $this->urlInterface = $urlInterface; parent::__construct($context); } public function execute() { // Get referer url $url = $this->_redirect->getRefererUrl(); // Or get any custom url //$url = $this->urlInterface->getUrl('my/custom/url'); // Create login URL $login_url = $this->urlInterface ->getUrl('customer/account/login', array('referer' => base64_encode($url)) ); // Redirect to login URL /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); $resultRedirect->setUrl($login_url); return $resultRedirect; } }
Now after login, the customer will be redirected to the referer url instead of account dashboard page.