Как отправить пароль пользователю при изменении

Апрель 28, 2018

Теги: Как это сделать?, Пользователи

Конечно, по современным стандартам отправка пароля пользователю почтой не считается безопасной, но личные данные не на всех сайтах настолько ценны, чтобы беспокоится об этом, а клиент может попросить вас сделать, чтобы пароль все же отправлялся.

Чтобы отправить пароль при его изменении, нужно сначала  перехватить его, т.к. в базе данных он хранится в шифрованном виде, за это отвечает обработчик события "OnBeforeUserChangePassword". В данном обработчике пароль сохраняется при помощи статической переменной в функции singleton.

Далее, мы используем обработчик события "OnBeforeEventAdd", который отвечает за отправку писем. В данном обработчике мы берем сохраненный пароль из функции singleton и добавляем в массив $arFields для почтового события "USER_PASS_CHANGED". Все что нужно после этого - добавить макрос "#PASSWORD#" в шаблон письма.


<?php


namespace Grain;

\
Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible
    
'main'
    
'OnBeforeUserChangePassword'
    
'\Grain\SendPassword::onBeforeUserChangePassword'
); 

\
Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible
    
'main'
    
'OnBeforeEventAdd'
    
'\Grain\SendPassword::onBeforeEventAdd'
); 

class 
SendPassword 
{
    function 
onBeforeUserChangePassword($arParams)
    {
        
self::singleton(true,$arParams["PASSWORD"]);
    }
    
    function 
onBeforeEventAdd(&$event, &$lid, &$arFields, &$message_id, &$files)
    {
        if(
$event=="USER_PASS_CHANGED")
            
$arFields["PASSWORD"] = self::singleton();
    }
    
    private function 
singleton($write=false,$newValue)
    {
        static 
$value;
        if(
$write)
            
$value $newValue;
        return 
$value;
    }
}

← Переход к списку