wp_authenticate()
Аутентифицирует пользователя (проверяет данные авторизации: логин/email и пароль) и возвращает объект пользователя, если проверка прошла успешно.
Функция не авторизует пользователя, а только проверяет данные. Для фактической авторизации полученные данные нужно использовать в wp_set_auth_cookie().
Используйте wp_signon(), когда нужно проверить логин, пароль и одновременно авторизовать юзера.
Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.
Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.
Хуки из функции
Возвращает
WP_User|WP_Error
. Объект данных пользователя (WP_User), если переданные данные прошли проверку. Объект WP_Error в противном случае.
Использование
wp_authenticate( $username, $password );
- $username(строка) (обязательный)
- Логин пользователя. С версии 4.5. можно указывать email.
- $password(строка) (обязательный)
- Пароль пользователя.
Примеры
#1 Проверим данные авторизации юзера
Предположим у нас есть логин и пароль пользователя и нам нужно проверить есть ли юзер с таким логином и паролем.
$username = 'truegamer'; $password = 'live123'; // пробуем получить юзера $auth = wp_authenticate( $username, $password ); // Проверка ошибок if ( is_wp_error( $auth ) ) { $error_string = $auth->get_error_message(); echo '<div id="message" class="error"><p>' . $error_string . '</p></div>'; } else { // юзер с указанным логином и паролем существует! // авторизуем его wp_set_auth_cookie( $auth->ID ); }
#2 Отключение авторизации юзера по логину
С версии WP 4.5 Wordpress поле логин можно ввести также и email. За такую проверку логина отвечают две функции, которые вешаются на хук authenticate
в файле /wp-includes/default-filters.php.
add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 ); // обычный логин add_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 ); // email в качестве логина
Таким образом, чтобы отключить авторизацию по логину, но оставить авторизацю по почте, нужно просто отключить фильтр связанный с логином:
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
#3 Отключение авторизации юзера по email
И точно также, чтобы оставить как и было до версии 4.5. авторизацию только по логину игнорируя email, нужно удалить фильтр связанный c email:
remove_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 );
Список изменений
С версии 2.5.0 | Введена. |
С версии 4.5.0 | $username now accepts an email address. |