Сверить пароль? Нет ничего проще!
Точнее, если бы это было так просто, я бы об этом не писал
ЗадачаПредставим такую задачу: нужно разработать форму, изменения из которые будут приняты только в том случае, если пользователь правильно введёт свой текущий пароль. Пример такой формы можно увидеть, к примеру, на free-lance.ru (Настройки → Основные настройки).
ПроблемаПредположим, что проблем с у формой у нас не возникло. Но вот беда, как проверить пароль из формы на соответствие текущему паролю пользователя? К сожалению, стандартной функции в API Битрикса я для этого не нашёл.
Всё проблемы имеют решениеСначала я подумал, что в поле PASSWORD Битрикс хранит простой MD5-хеш от пароля. Но всё оказалось не всё так-то просто

Оказывается, Битрикс прибявляет к паролю так называемую "соль" (подробности — в спец. литературе). Покопавшись в метода
CUser::Login() можно узнать и алгорим сверки. А дальше дело за маленьким: реализовать этот алгорим у себя.
Вот то, что получилось у меня:
/**
* Проверяем, является ли $password текущим паролем пользователя.
*
* @param int $userId
* @param string $password
*
* @return bool
*/
function isUserPassword($userId, $password)
{
$userData = CUser::GetByID($userId)->Fetch();
$salt = substr($userData['PASSWORD'], 0, (strlen($userData['PASSWORD']) - 32));
$realPassword = substr($userData['PASSWORD'], -32);
$password = md5($salt.$password);
return ($password == $realPassword);
}
|
Эх, если бы такой метод бы в API...
Назад в раздел