- 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_signon( $credentials, $secure_cookie );
Название | Тип | Описание |
---|---|---|
$credentials | массив | Массив данных для авторизации с обязательными ключами: user_login - логин (строка) user_password - пароль (строка) remember - запомнить ли авторизацию (логический) |
$secure | логический | Использовать ли защищённое хранилище в куки? По умолчанию: "true", если сайт работает по SSL, иначе "false" |
Если переписать предыдущий пример с использованием функции "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 пользователя, которому нужно изменить пароль. Обязательный параметр. |
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 пользователя, которому нужно пересохранить хеш. |
$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 'Неверный пароль!';
}