Как проверить USER_CHECKWORD

4k
Алексей,
Как проверить USER_CHECKWORD
Как проверить USER_CHECKWORD

В базе данных у пользователей есть поле CHECKWORD, но оно не равно той строке, что отправляется пользователю на почту для восстановления пароля. Для проверки нужно провести небольшие манипуляции.

В базе данных у пользователей есть поле CHECKWORD, но оно не равно той строке, что отправляется пользователю на почту для восстановления пароля. Для проверки нужно провести небольшие манипуляции.

Для старой версии ядра: нужно взять поле CHECKWORD пользователя, вырезать оттуда первые 8 символов и присыпать ими USER_CHECKWORD :)

Для новой версии (примерно с 20.5) есть отдельный метод Password::equals. Пример кода ниже:

$userCheckword = htmlspecialcharsbx($_REQUEST['USER_CHECKWORD']);
$dbUser = CUser::GetList(($by="personal_country"), ($order="desc"), array('LOGIN' => htmlspecialcharsbx($_REQUEST['USER_LOGIN'])));
if ($arUser = $dbUser->fetch()){ // данные пользователя по логину

	// Новая версия ядра
	$res = \Bitrix\Main\Security\Password::equals($arUser["CHECKWORD"], $userCheckword);

	// Старая версия ядра
	// $salt = substr($arUser["CHECKWORD"], 0, 8); // соль
	// $res = $arUser["CHECKWORD"] === $salt.md5($salt.$userCheckword)

	if ($res) { // сравнение строки из письма со строкой в БД
		return true;
	} else {
		return false;
	}
} else {
	return false;
}

Кстати, метод \Bitrix\Main\UserTable::getList не возвращает поле CHECKWORD. Поковыряться в исходниках можно тут /bitrix/modules/main/classes/general/user метод ChangePassword

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 5 ноября 2020 | Обновлено 1 марта 2021
костыли, примеры d7, авторизация, разработчику
Поделиться
Похожие статьи
Как получить ограничения доставки по платежным системам
Понадобилось вне компонента оформления заказа показать какие способы оплаты доступны для той или ино...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
14 фев 2023
спасибо, код рабочий!
В базе данных у пользователей есть поле CHECKWORD, но оно не равно той строке, что отправляется пользователю на почту для восстановления пароля. Для проверки нужно провести небольшие манипуляции.