Событие/Наблюдатель После смены пароля Автоматически выходит из системы


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

Author: Navin Bhudiya, 2016-09-16

3 answers

Подключитесь к событию controller_action_postdispatch_customer_account_resetpasswordpost и в наблюдателе вы можете написать следующий код для программного выхода из системы:

Mage::getSingleton('customer/session')->logout();

РЕДАКТИРОВАТЬ

Вам необходимо создать новый модуль.
Давайте назовем это Company_Module.
app/etc/modules/Company_Module.xml - файл декларации

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <codePool>local</codePool>
            <active>true</active>
        </Company_Module>
    </modules>
</config>

app/code/local/Company/Module/etc/config.xml - файл конфигурации

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <version>0.0.1</version>
        </Company_Module>
    </modules>
    <global>
        <models>
            <company_module>
                <class>Company_Module_Model</class>
            </company_module>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_postdispatch_customer_account_resetpasswordpost><!-- observe the event -->
                <observers>
                    <company_module>
                        <class>company_module/observer</class>
                        <method>logout</method>
                    </company_module>
                </observers>
            </controller_action_postdispatch_customer_account_resetpasswordpost>
        </events>
    </frontend>
</config>

app/code/local/Company/Module/Model/Observer.php - класс наблюдения

<?php 
class Company_Module_Model_Observer {
    public function logout($observer) {
        if (version_compare(Mage::getVersion(), '1.7', '<')) {
            $session = Mage::getSingleton('customer/session');
            if ($session->isLoggedIn()) {
                Mage::getSingleton('customer/session')->logout();
            }
        }
    } 
}

Очистите кэш, когда закончите.

 2
Author: Manashvi Birla, 2016-09-16 12:03:35

В Magento по умолчанию эта функция уже существует. Вы можете увидеть это в этом в методе Mage_Customer_AccountController::resetPasswordPostAction() на app/code/core/Mage/Customer/controllers/AccountController.php.

public function resetPasswordPostAction()
{
    .....

    try {
        // Empty current reset password token i.e. invalidate it
        $customer->setRpToken(null);
        $customer->setRpTokenCreatedAt(null);
        $customer->cleanPasswordsValidationData();
        $customer->save();

        $this->_getSession()->unsetData(self::TOKEN_SESSION_NAME);
        $this->_getSession()->unsetData(self::CUSTOMER_ID_SESSION_NAME);

        $this->_getSession()->addSuccess($this->_getHelper('customer')->__('Your password has been updated.'));
        $this->_redirect('*/*/login');
    } catch (Exception $exception) {
        $this->_getSession()->addException($exception, $this->__('Cannot save a new password.'));
        $this->_redirect('*/*/changeforgotten');
        return;
    }
}

Как вы можете видеть, если все работает хорошо, то Magento сначала сохранит новый пароль. Затем он отключит текущую сессию клиента, после чего клиент будет перенаправлен на страницу входа в систему.

Итак, в вашем случае клиент не вышел из системы, значит, в этом методе контроллера была произведена некоторая настройка/перезапись. Вам нужно выяснить это и применить то же самое, что и Magento делает это здесь, в этом настраиваемом разделе.

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

    //invalidate session
    $this->_getSession()->unsetData(self::TOKEN_SESSION_NAME);
    $this->_getSession()->unsetData(self::CUSTOMER_ID_SESSION_NAME);

    $this->_getSession()->addSuccess($this->_getHelper('customer')->__('Your password has been updated.'));

    //redirecting to login page
    $this->_redirect('*/*/login');
 1
Author: Rajeev K Tomy, 2017-04-13 12:54:58

Я думаю, вам нужно проверить ниже событие

customer_save_after

В описанном выше случае вы можете проверить смену пароля и выйти из системы для этого конкретного клиента,

При смене пароля это событие также вызывается, чтобы вы могли попробовать с этим событием

Надеюсь, это поможет вам.

 0
Author: Murtuza Zabuawala, 2016-09-16 05:39:13