CE1.9.1.1 - Внедрение пользовательской логики в событие входа в систему


Мне нужно реализовать пользовательское требование на сайте, который я обновляю. На этом сайте настроено несколько магазинов с 4 представлениями магазинов, и каждое представление магазина имеет определенную группу клиентов, поэтому при регистрации в этом представлении магазина клиенты автоматически добавляются в эту группу. Теперь я должен убедиться, что клиенты могут входить только в тот магазин, в котором они изначально зарегистрировались. У меня уже есть Account Sharing Options, настроенный на Per Website.

URL-адреса, представленные в качестве примера в виде следует:
www.mysite.com/agency-abc/customer/account/login/
www.mysite.com/agency-xyz/customer/account/login /

Итак, моя идея состоит в том, чтобы подключиться к событию controller_action_predispatch_customer_account_loginPost и проверить идентификатор группы клиента в настройках магазина. Я подключил наблюдателя (который, как я знаю, запускается) в качестве теста следующим образом:

Config.xml

<frontend>
    <events>
        <controller_action_predispatch_customer_account_loginPost>
            <observers>
                <logincheck>
                    <class>logincheck/observer</class>
                    <method>loginCheck</method>
                </logincheck>
            </observers>
        </controller_action_predispatch_customer_account_loginPost>
    </events>
</frontend>

Model/Observer.php ( отказ от ответственности: код заимствован из другого поста здесь обмен стеками)

class Kalldis_LoginCheck_Model_Observer
{
    public function loginCheck(Varien_Event_Observer $observer)
    {
        $customer = $observer->getEvent()->getCustomer();
        $session = Mage::getSingleton('customer/session');

        // **** hard-coding groupid as a test
        if ($customer->getGroupId() == 8)
        {
            $session->setId(null)
                ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID)
                ->getCookie()->delete('customer');

            Mage::throwException('You are not allowed to login to this store.');
            return;
        }

        //die("observed");
    }
}

К сожалению, я получаю следующую ошибку:

Неустранимая ошибка: Вызов функции-члена getGroupId() для не-объекта в...Model/Observer.php в строке 16

Я не уверен, правильно ли использовать это событие и/или я неправильно пытаюсь получить доступ к данным клиента.

Буду искренне признателен за любую помощь!


* РЕДАКТИРОВАТЬ НА ОСНОВЕ ОТВЕТА КАЙСАРА НИЖЕ

Model/Observer.php

class Kalldis_LoginCheck_Model_Observer
{
    public function loginCheck(Varien_Event_Observer $observer)
    {
        $customer = $observer->getEvent()->getCustomer();
        $session = Mage::getSingleton('customer/session');
        $storeId = Mage::app()->getStore()->getId();

        if ($customer->getStoreId() !== $storeId)
        {
            $session->setId(null)
                ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID)
                ->getCookie()->delete('customer');

            Mage::throwException('You are not allowed to login to this store.');
            return;
        }
    }
}
Author: Community, 2016-12-23

1 answers

Вместо controller_action_predispatch_customer_account_loginPost

Используйте событие customer_login, после чего вы сможете получить доступ к сеансу клиента . поскольку для текущего события пользователь еще не вошел в систему.

 2
Author: Qaisar Satti, 2016-12-23 11:16:45