Аутентификация в WordPress

Система аутентификации в WordPress состоит из нескольких функций. Они используются для проверки доступов пользователей, установки значений cookie, сброса пароля и повторного возобновления сеанса. Разберём некоторые из них:
  • wp_authenticate - проверяет правильность пароля и логина
  • wp_set_auth_cookie - авторизует пользователя по id, устанавливает cookie
  • wp_check_password - сравнивает пароль с его хешем
  • wp_signon - проверяет правильность пароля и логина и авторизует пользователя
  • wp_set_password - изменяет пароль пользователя
  • clean_user_cache - очищает кеш пользователя
Разберём эти функции по порядку.

Авторизация

Авторизация пользователя на сайте начинается с проверки правильности введённого пароля и логина. Это делается с помощью функции "wp_authenticate". Функция не авторизует пользователя, а только проверяет правильность введённых данных.

Функция "wp_authenticate" возвращает объект WP_User в случае ввода верных данных и объект WP_error при ошибке. Функция принимает всего два аргумента (логин и пароль):
wp_authenticate( $login, $password );
Продемонстрируем способ использования функции:
$login = 'MouseDC';
$password = 'passwd';

$auth = wp_authenticate( $login, $password );

if( !is_wp_error( $auth ) ) {
   // пароль и логин введены верно
   wp_set_auth_cookie( $user_obj->ID ); // авторизация пользователя в системе
}else{
   // неправильный логин или пароль
   echo $auth->get_error_message(); // вывод ошибки авторизации
}
Благодаря функции "wp_set_auth_cookie" код из примера выше ещё и авторизует пользователя в системе, и устанавливает куки аутентификации. Давайте рассмотрим эту функцию. поближе:
wp_set_auth_cookie( $user_id, $remember, $secure, $token );
Функции "wp_set_auth_cookie" можно передавать четыре аргумента, из которых только первый является обязательным:
Название Тип Описание
$user_id чило ID пользователя, в учётную запись которого произойдёт авторизация. Обязательный параметр.
$remember логический Сохранять ли авторизацию. В значении true увеличивает время жизни файлов cooki до 14 дней. По умолчанию false (время жизни - 2 дня).
$secure логический Использовать ли защищённое хранилище в куки? По умолчанию: "true", если сайт работает по SSL, иначе "false"
$token строка Токен сессии, в которую нужно войти
Для упрощения программирования функционала авторизации на сайте можно использовать функцию "wp_signon". Она является функцией-обёрткой для ранее рассмотренных "wp_authenticate" и "wp_set_auth_cookie".

У функции "wp_signon" есть несколько аргументов:
wp_signon( $credentials, $secure_cookie );
Название Тип Описание
$credentials массив Массив данных для авторизации с обязательными ключами:

user_login - логин (строка)
user_password - пароль (строка)
remember - запомнить ли авторизацию (логический)
$secure логический Использовать ли защищённое хранилище в куки? По умолчанию: "true", если сайт работает по SSL, иначе "false"
Функция "wp_signon" возвращает объект WP_User в случае успешной авторизации и объект WP_error при ошибке.

Если переписать предыдущий пример с использованием функции "wp_signon" вместо "wp_authenticate" и "wp_set_auth_cookie", то получится такой код:
$auth = array();
$auth['user_login'] = 'MouseDC';
$auth['user_password'] = 'passwd';
$auth['remember'] = true;

$user = wp_signon( $auth );

if( !is_wp_error($user) ) {
   echo 'Вы успешно авторизованы!';
}else{
   echo $user->get_error_message();
}

Управление паролем и сброс кеша пользователя

Для смены пароля пользователя используется функция "wp_set_password". Эта функция принимает два аргумента:
wp_set_password( $password, $user_id );
Название Тип Описание
$password строка Новый пароль
$user_id число ID пользователя, которому нужно изменить пароль. Обязательный параметр.
Приведём пример использования этой функции. В примере зададим пароль "passwd" для пользователя сс ID равным 1 (администратор сайта):
wp_set_password( 'passwd', 1 );
Обратите внимание на то, что при любых манипуляциях с данными пользователей, необходимо очищать кеш. Иначе к примеру, при следующем вызове функции "get_userdata" будут возвращены старые данные, потому что кеш ещё не очистился.

Для очистки кеша используйте функцию clean_user_cache, у которой есть только один параметр - ID пользователя:
clean_user_cache( $user_id );
Используем описанную ранее функцию для смены пароля пользователя, чтобы продемострировать использование функции по сбросу кеша:
$user_id = 9; // ID пользователя, которому меняем пароль
$new_passwd = 'MouseDC'; //новый пароль
wp_set_password( $new_passwd, $user_id ); // смена пароля пользователя
clean_user_cache( $user_id ); // очистка кеша пользователя

Хранение паролей в базе данных

В базе данных сайта пароли не хранятся в открытом виде. Они преобразуются с помощью хеш-функций в строки из набора символов и сохраняются в базе. К примеру, вот хеш, созданный по алгоритму MD5 для строки "MouseDC" :
0ab551bfb9d2f08146d280ffdf016e9e
Преобразование паролей в хеш делается специально, чтобы при утере базы данных злоумышленники не смогли авторизоваться на сайте. Во время авторизации вводимый пароль преобразуется в хеш, потом этот хеш сравнивается с сохранённым в базе данных.

Функция "wp_check_password" за проверку-сравнение введённого пароля с сохранённым хешем. Эта функция возвращает логические false или true в случае успешного сравнения кеша и вводимого пароля. У функции есть три парамета:
wp_check_password( $password, $hash, $user_id );
Название Тип Описание
$password строка Пароль. Обязательный параметр
$hash строка Сохранённый в базе данных хеш вводимого пароля. Обязательный параметр
$user_id логический ID пользователя, которому нужно пересохранить хеш.
Приведём пример использования функции. Допустим, нам нужно узнать действительно ли строка является действующим паролем пользователя с ID равным 9:
$password = 'MouseDC'; // пароль для проверки
$user_id = 9; // ID пользователя

$user = get_userdata( $user_id ); // информация польщователя
$hash = $user->data->user_pass; // сохранённый хеш пароля

if( wp_check_password( $password, $hash ) ){
   echo 'Введён текущий пароль пользователя';
}else{
   echo 'Неверный пароль!';
}
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: