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

196
Алексей,
Как проверить USER_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
Понадобилось вне компонента оформления заказа показать какие способы оплаты доступны для той или ино...
Читать дальше »
Алексей,
Комментарии
Зарегистрируйтесь чтобы получать уведомления об ответе