WordPress как на ладони
wordpress jino

wp_authenticate() WP 2.5

Проверяет данные авторизации зарегистрированного пользователя (логин и пароль) и авторизует его, если проверка прошла успешно.

Функция сама по себе ничего не делает, а передает данные в фильтр 'authenticate', через который проверяется переданные логин и пароль, и пользователь авторизуется.

Используется в: user_pass_ok(), wp_signon().
Хуки из функции:
Возвращает

Объект данных о пользователе (WP_User), если авторизация прошла успешно и объект WP_Error в противном случае.

Использование

wp_authenticate( $username, $password );
$username(строка) (обязательный)
Логин пользователя. С версии 4.5. можно указывать email.
$password(строка) (обязательный)
Пароль пользователя.

Примеры

#1 Авторизуем пользователя

Предположим у нас есть логин и пароль пользователя и нам нужно его авторизовать (залогинить), мы может сделать это так:

$username = 'truegamer';
$password = 'live_is_a_game';

// Авторизуем
$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 {
	echo "Авторизация прошла успешно!";
}

Код wp authenticate: wp-includes/pluggable.php WP 4.8.2

<?php
function wp_authenticate($username, $password) {
	$username = sanitize_user($username);
	$password = trim($password);

	/**
	 * Filters whether a set of user login credentials are valid.
	 *
	 * A WP_User object is returned if the credentials authenticate a user.
	 * WP_Error or null otherwise.
	 *
	 * @since 2.8.0
	 * @since 4.5.0 `$username` now accepts an email address.
	 *
	 * @param null|WP_User|WP_Error $user     WP_User if the user is authenticated.
	 *                                        WP_Error or null otherwise.
	 * @param string                $username Username or email address.
	 * @param string                $password User password
	 */
	$user = apply_filters( 'authenticate', null, $username, $password );

	if ( $user == null ) {
		// TODO what should the error message be? (Or would these even happen?)
		// Only needed if all authentication handlers fail to return anything.
		$user = new WP_Error( 'authentication_failed', __( '<strong>ERROR</strong>: Invalid username, email address or incorrect password.' ) );
	}

	$ignore_codes = array('empty_username', 'empty_password');

	if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) {
		/**
		 * Fires after a user login has failed.
		 *
		 * @since 2.5.0
		 * @since 4.5.0 The value of `$username` can now be an email address.
		 *
		 * @param string $username Username or email address.
		 */
		do_action( 'wp_login_failed', $username );
	}

	return $user;
}

Cвязанные функции

Из метки: authenticate (авторизация)

Еще из раздела: Вход/выход

wp_authenticate 8 комментариев
  • Дима

    Подскажите, плиз, а как можно сделать, чтоб сюда $auth = wp_authenticate( $username, $password ); чтоб в $password можно было сразу хэш в MD5 ставить?

    Ответить3.7 года назад #
    • Смахивает чутка на попытки взлома)
      Рыть нужно в сторону фильтра authenticate.

      Ответить3.7 года назад #
      • Дима

        ничуть...

        Ответить3.7 года назад #
        • К слову, у меня эта функция не срабатывает почему-то...
          Вроде выдает результат положительный, но авторизация не происходит(

          Ответить3.7 года назад #
          • Дима

            Авторизация произойдет, если поставить вот такую конструкцию:

            $user_obj = wp_authenticate($name, $pass);
            
            		if(!is_wp_error($user_obj)){
            			//Юзер зашел!!!
            			nocache_headers();
            			wp_clear_auth_cookie();
            			wp_set_auth_cookie($user_obj->ID);
            		}else{
            			//Юзер не зашел
            			$error_string = $user_obj->get_error_message();
            			echo $error_string;
            		}
            1
            Ответить3.7 года назад #
            • Спасибо, не проверял, т. к. уже решил задачу другим способом, но по логике должно работать.

              PS Смотрю у нас много общего, мне можно написать в асю 6_____23496931 ok

              Ответить3.7 года назад #
  • Влад

    Здравствуйте!
    А как можно сделать проверку, авторизован сейчас пользователь или нет? Нужно для показа блока только зарегистрированным пользователям.
    Спасибо!

    Ответить2.9 года назад #

Здравствуйте, !

Ваш комментарий