Функция проверки пароля у пользователя на соответствие заданному паролю

4 Апреля 2018

Как известно, битрикс очень мощная система. И сложная. Настолько сложная, что разработчики порой забывали внедрить в свое детище самые простые инструменты, а обычные по своей сути вещи усложняют до такой степени, что потом разобраться в том , как они работают, просто не представляется возможным.

Короче я говорю сейчас о проблеме проверки пароля на соответствие некоторому значению.

Если коротко описать проблему, то пароль, как и во многих нормальных системах, храниться в виде некоторого хеша. Это хорошо. Плохо в данной ситуации то, что хеш-функция тут не стандартная, а самописная, и следовательно нельзя просто взять и сравнить обычные md5 от пароля заданного и пароля юзера. О API-функции для решения данной задачи разрабы, как я уже говорил выше, не позаботились, а значит нам с вами придется все делать самому.

Слава богу мы не одни, кто задавался этой проблемой. Есть на свете человек по имени Шоков Алексей, который благополучно разрешил данную проблему и выплеснул все свои наработки в виде статьи на форумах битрикса. В этой статье все расписанно достаточно подробно, я же здесь приведу только итоговый код функции.

	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); //проверяем
	}

Ничего сложного в функции нет, и это не удивительно, ведь в ней всего 5 строк. Но как хорошо что она все-таки есть.

Не забудьте подключить API битрикса, если будете делать проверку в кастомном скрипте.

Возврат к списку