Аутентификация в 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мотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб