6 май 2021

Проверка пароля пользователя в Битрикс версии 20.5 и выше

#bitrix, #php

Иногда требуется проверить пароль пользователя за пределами административной части сайта. Например при построении web-cервисов или создании специального авторизованного раздела для клиентов. В битриксе нет встроенного механизма для решения этой задачи. Но сделать это можно приложив совсем небольшие усилия.

Проверка пароля пользователя в Битрикс версии 20.5 и выше

Ранее я уже рассматривал этот вопрос в статье проверка пароля пользователя Bitrix, однако с тех пор вышла новая версия 20.5.400 в которой значительно изменился весь подход к хранению и проверке паролей. Теперь все пароли хешируются по алгоритму SHA-512 и этот хеш хранится даже для старых паролей (чтобы проверять на совпадения с новыми).

Для того, чтобы решить задачу нам потребуется класс Bitrix\Main\UserTable, который достает информацию о пользователе и новый класс Bitrix\Main\Security\Password, который выполняет проверку на совпадение введенного пароля. Напишем свою реализацию функции проверяющую пароль пользователя.

<?php

use Bitrix\Main\UserTable;
use Bitrix\Main\Security\Password;

function isAuthorized($login, $password): bool
{
    $userData = UserTable::GetRow([
        'filter' => ['=LOGIN' => $login, '=ACTIVE' => 'Y'],
        'select' => ['PASSWORD'],
    ]);

    return Password::equals($userData['PASSWORD'], $password);
}

Эта функция принимает логин и введенный пароль. Достает из базы хеш и сверяет данные. На выход возвращается булево значение, означающие совпадение или нет. Подключив её в local/php_interface мы cможем использовать её в любом месте нашего проекта и создавать свои web-сервисы и авторизованные зоны.

Полезные ссылки

Все статьи

© 2020-2021 Александр Пантелеев