wp_authenticate() WP 2.5.0

Аутентифікує користувача (перевіряє дані авторизації: логін/email та пароль) та повертає об’єкт користувача, якщо перевірка пройшла успішно.

Функція не авторизує користувача, лише перевіряє дані. Для фактичної авторизації отримані дані потрібно використовувати wp_set_auth_cookie() .

Використовуйте wp_signon() , коли необхідно перевірити логін, пароль і водночас авторизувати користувача.

Це init .

Заміна функції (перевизначення) — у плагіні можна створити функцію з такою самою назвою, тоді вона замінить поточну функцію.

Основа для:
user_pass_ok() ,
wp_signon()

Хуки з функції

Повертає

WP_User|WP_Error. Об’єкт даних користувача (WP_User), якщо передані дані пройшли перевірку. Об’єкт WP_Error інакше.

Використання

wp_authenticate($username, $password);
$username
(рядок) (обов’язковий)
Логін користувача. З версії 4.5. можна вказувати email.
$password
(рядок) (обов’язковий)
Пароль користувача.

Приклади

0

#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 );
}
0

#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);
0

#3 Відключення авторизації користувача по email

І так само, щоб залишити як і було до версії 4.5. авторизацію тільки за логіном ігноруючи email, потрібно видалити фільтр, пов’язаний з email:

remove_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3);

список змін

З версії 2.5.0Введено.
З версії 4.5.0$username now accepts an email address.

Код wp_authenticate() WP 6.0.2

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

	/**
	 * Filters whether set user login credentials є valid.
	 *
	 * A WP_User object returned if credentials authenticate a user.
	 * WP_Error або 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 або null otherwise.
	 * @param string $username Username або email address.
	 * @param string $password User password
	 */
	$user = apply_filters( 'authenticate', null, $username, $password );

	if ( null == $user ) {
		// TODO: What should the error message be? (Чи буде ці ще хлопці?)
		// Тільки необхідно, якщо всі 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, true ) ) {
		$error = $user;

		/**
		 * Fires after a user login has failed.
		 *
		 * @ Since 2.5.0
		 * @since 4.5.0 Значення "$username" може бути електронною поштою.
		 * @since 5.4.0 The `$error` parameter was added.
		 *
		 * @param string $username Username або email address.
		 * @param WP_Error $error A WP_Error object with the authentication failure details.
		 */
		do_action( 'wp_login_failed', $username, $error );
	}

	return $user;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *