cancel
Showing results for 
Search instead for 
Did you mean: 

Redirect to login with add cart button for guess user

Redirect to login with add cart button for guess user

I'm trying redirect to the login when some guess user press the add cart button and he is not registered. But i can't do it. I am usin a Observer, with the following event

<event name="controller_action_predispatch_checkout_cart_add">

this is my /app/code/vendor/module/etc/frontend/event.xml

event.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_checkout_cart_add">
        <observer name="restrict_sales_model_cart_add_before" instance="vendor\module\Observer\ForceLogin" />
    </event>
</config>

and my Observer/app/code/vendor/module/Observer/ForceLogin.php

ForceLogin.php

<?php
namespace vendor\module\Observer;

use Magento\Framework\Event\ObserverInterface;

class ForceLogin implements ObserverInterface
{
    protected $_responseFactory;
    protected $_url;
    private $scopeConfig;
    private $customerSession;
    private $customerUrl;
    private $context;
    private $contextHttp;
    protected $redirect;

    public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\App\Action\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Framework\App\Http\Context $contextHttp, \Magento\Customer\Model\Url $customerUrl, \Magento\Framework\App\ResponseFactory $responseFactory, \Magento\Framework\App\Response\RedirectInterface $redirect, \Magento\Framework\UrlInterface $url)
    {
        $this->scopeConfig = $scopeConfig;
        $this->context = $context;
        $this->customerSession = $customerSession;
        $this->customerUrl = $customerUrl;
        $this->contextHttp = $contextHttp;
        $this->messageManager = $context->getMessageManager();
        $this->_responseFactory = $responseFactory;
        $this->_url = $url;
        $this->redirect = $redirect;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $isLoggedIn = $this
            ->contextHttp
            ->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);

        if (!$isLoggedIn)
        {
            $this
                ->messageManager
                ->addError(__('Loggin First.'));
            $customRedirectionUrl = $this
                ->_url
                ->getUrl('customer/account/login');
            $this
                ->_responseFactory
                ->create()
                ->setRedirect($customRedirectionUrl)->sendResponse('200');
            exit();
        }
        return $this;
    }
}

Any idea why he is not doing the redirect?

6 REPLIES 6

Re: Redirect to login with add cart button for guess user

Hello @ignacio_m 

 

Why don't you check out these?

Compare code or use same extension.

 

https://github.com/bitExpert/magento2-force-login?files=1

https://github.com/abdelkebir/magento2-force-login?files=1

Was my answer helpful? You can accept it as a solution.
175+ Professional Extensions for M1 & M2
Need a developer?Just visit Contact Us Now

Re: Redirect to login with add cart button for guess user

Hello @ignacio_m 

 

check default wishlist functionality and implement that way


Problem solved? Click Kudos & Accept as Solution!
Sunil Patel
Magento 2 Certified Professional Developer & Frontend Developer

Re: Redirect to login with add cart button for guess user

Hello @theMageComp 

 

Thanks, but not working for me Smiley Sad  I still can't make him redirect when press add the cart button. Maybe it's for my event?

 


@theMageComp wrote:

Hello @ignacio_m 

 

Why don't you check out these?

Compare code or use same extension.

 

https://github.com/bitExpert/magento2-force-login?files=1

https://github.com/abdelkebir/magento2-force-login?files=1



Re: Redirect to login with add cart button for guess user

Will you please remove exit; from yours, if condition and then try again.

Was my answer helpful? You can accept it as a solution.
175+ Professional Extensions for M1 & M2
Need a developer?Just visit Contact Us Now

Re: Redirect to login with add cart button for guess user

 

Not working, this is my new fuction. I think my event it's wrong:

 

 

<event name="controller_action_predispatch_checkout_cart_add">

 

New function.

 

public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $actionName = $observer->getEvent()->getRequest()->getFullActionName();

        if($actionName == 'checkout_cart_add'){

            if(!$this->_customerSession->isLoggedIn())
            {
                $this->_messageManager->addError('es distinto.');
                $observer->getRequest()->setParam('product', false);
                $redirectionUrl = $this->_url->getUrl('customer/account/login');
                $this->_responseFactory->create()->setRedirect($redirectionUrl)->sendResponse();
            }
        }else{
            return $this;
        }

        return $this;
    }

Re: Redirect to login with add cart button for guess user

@ignacio_m 
why can't you set the guest checkout to no,
store->configuration->sales->checkout->checkout option

if it work give kudos and accept as solution.