Перенаправление на страницу входа в систему, если не войти в magento


Я хочу ограничить количество посетителей для одного магазина на веб-сайте с несколькими магазинами. Если они не вошли в систему, перенаправьте их на страницу входа. Они также могут создать учетную запись и войти в систему после посещения веб-сайта. Если у кого-нибудь есть идеи, пожалуйста, дайте мне знать.

Author: Marius, 2016-06-16

3 answers

Для этого вы можете создать модуль.

Сначала вам нужно объявить наблюдателя на событии controller_action_predispatch: app/code/local/Vendor/Module/etc/config.xml

<config>
    <modules>
        <Vendor_Module>
            <version>0.0.1</version>
        </Vendor_Module>
    </modules>
    <global>
        <models>
            <module>Vendor_Module_Model</module>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_predispatch>
                <observers>
                    <vendor_module_controller_action_predispatch>
                        <type>singleton</type>
                        <class>module/observer</class>
                        <method>preDispatch</method>
                    </vendor_module_controller_action_predispatch>
                </observers>
            </controller_action_predispatch>
        </events>
    </frontend>
</config>

Затем в app/code/local/Vendor/Module/Model/Observer.php пожалуйста, обратите внимание, что вам нужно заменить STORE_ID идентификатором магазина, в котором вы хотите реализовать эту функцию :

<?php

class Vendor_Module_Model_Observer {

    public function preDispatch(Varien_Event_Observer $observer)
    {
        $controller = $observer->getControllerAction();

        if (Mage::app()->getStore()->getId() == STORE_ID) {

            if ('customer' === $controller->getRouteName()) {
                return $this;
            }

            if (!Mage::getSingleton('customer/session')->authenticate($controller)) {
                $controller->setFlag('', 'no-dispatch', true);
            }
        }
    }

}

И app/etc/modules/Vendor_Module.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Vendor_Module>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Magento_Customer/>
            </depends>
        </Vendor_Module>
    </modules>
</config>
 5
Author: Raphael at Digital Pianism, 2016-06-16 13:00:19

Вы можете создать наблюдателя для события controller_action_predispatch.
Метод наблюдателя может выглядеть следующим образом:

public function redirectNotLogged(Varien_Event_Observer $observer)
{
    $storeId = Mage::app()->getStore()->getId(); 
    $restrictedStoreId = your restricted store id here. It can even come from a config setting.
    if ($storeId == $restrictedStoreId) {
    $action = strtolower(Mage::app()->getRequest()->getActionName());
        $controller = strtolower(Mage::app()->getRequest()->getControllerName());
        $openActions = array(
            'create',
            'createpost',
            'login',
            'loginpost',
            'logoutsuccess',
            'forgotpassword',
            'forgotpasswordpost',
            'resetpassword',
            'resetpasswordpost',
            'confirm',
            'confirmation'
        );
        if ($controller == 'account' && in_array($action, $openActions)) {
            return $this; //if in allowed actions do nothing.
        }
        if(! Mage::helper('customer')->isLoggedIn()){
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account/login'));
        }
    }
}
 2
Author: Marius, 2016-06-16 12:55:21

Magento 2

<?php
namespace BA\GiftCertificate\Controller\CustAccount;
 
use Magento\Customer\Model\Session;
use Magento\Framework\Controller\Result\RedirectFactory;
use Magento\Framework\View\Result\PageFactory;

class Index implements \Magento\Framework\App\ActionInterface
{
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;
    /**
     * @var \Magento\Framework\Controller\Result\RedirectFactory
     */
    protected $resultRedirect;
    /**
     * @var \Magento\Customer\Model\Session
     */
    protected $customerSession;

    /**
     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirect
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     * @param \Magento\Customer\Model\Session $customerSession
     */
    public function __construct(
        RedirectFactory $resultRedirect,
        PageFactory $resultPageFactory,
        Session $customerSession
    ) {
        $this->resultRedirect = $resultRedirect;
        $this->resultPageFactory = $resultPageFactory;
        $this->customerSession = $customerSession;
    }
    /**
     * Default customer account page
     *
     * @return void
     */
    public function execute()
    {
        if (!$this->customerSession->isLoggedIn()) {
            /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
            $resultRedirect = $this->resultRedirect->create();
            $resultRedirect->setPath('customer/account/login');
            return $resultRedirect;
        } else {
            return $this->resultPageFactory->create();
        }
    }
}
 -1
Author: Liz Eipe C, 2020-12-31 00:38:02