Navegacion restringida a usuarios logeados en Magento2

En Magento 2 podemos limitar el acceso solo a usuarios logeados mediante la creación de un modulo.

1.- Creamos los archivos minimos necesarios para el modulo.

Vendor/NombreModulo/etc/module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_NombreModulo" setup_version="1.0.0">
</module>
</config>

Vendor/NombreModulo/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Pengo_PrivateStore',
__DIR__
);

2.- Para limitar el acceso usaremos un observer que estará escuchando el evento controller_action_postdispatch en el frontend.

/Vendor/NombreModulo/etc/frondend/events.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="controller_action_postdispatch">
<observer name="privatestore_controller_action_postdispatch" instance="Vendor\NombreModulo\Observer\PrivateStore" />
</event>
</config>

3.- Creamos la clase Observer que contendrá la lógica para poder limitar el acceso a usuarios logeados.

Vendor/NombreModulo/Observer/PrivateStore.php

<?php
namespace Vendor\NombreModulo\Observer;
use Magento\Framework\Event\ObserverInterface;
class PrivateStore implements ObserverInterface {
private $customerUrl;
private $context;
private $contextHttp;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\App\Http\Context $contextHttp,
\Magento\Customer\Model\Url $customerUrl
){$this->context = $context;
$this->customerUrl = $customerUrl;
$this->contextHttp = $contextHttp;
} public function execute(\Magento\Framework\Event\Observer $observer){$controller_name = $this->context->getRequest()->getControllerName();
$action_name = $this->context->getRequest()->getActionName();
$isLoggedIn = $this->contextHttp->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
if ($isLoggedIn){return $this;
} $controller_allow = array('account','section');
$action_allow = array('login','loginPost','forgotpassword','createpassword','createpost','create','load');
if (in_array($controller_name,$controller_allow) && in_array($action_name,$action_allow)){return $this;
} $customer_login_url = $this->customerUrl->getLoginUrl();
$this->context->getResponse()->setRedirect($customer_login_url);
} }

 

Como podemos ver limitamos todos los controladores exepto el controlador account:

  • registro (create, createpost)
  • crear passwords (createpassword)
  • recuperar password (forgotpassword)
  • login (login, loginpost)

También permitimos acceso a section load para no bloquear el captcha si es que llega a aparecer.

forzar login magento 2

Fecha: 13 Jun 2018 17:01 Hrs.

Acerca del autor

Sombrero de paja molder