WordPress как на ладони
rgbcode is looking for WordPress developers.

wp_signon()WP 2.5.0

Авторизует пользователя, по указанному логину/email, паролю и параметру remember.

Функции нужно передать массив, с ключами: user_login, user_password, remember. Если массив не указан то функция пытается получить эти данные из глобальной переменной $_POST.

Время жизни куков авторизации, устанавливается на основе параметра 'remember'.

Функция не устанавливает текущего пользователя. Это значит, если функция вызвана до события init, то проверка is_user_logged_in() вернет false. Если эта проверка нужна заранее, то вам нужно установить текущего юзера вручную через wp_set_current_user().

Заменяет устаревшую функцию: wp_login().

Функцию нужно использовать до вывода какого-либо контента (текста, HTML) на страницу, потому что функция устанавливает куки, которые после вывода контента не могут быть установлены...

Если нужно де-авторизовать пользователя, используйте wp_logout().

Работает на основе: wp_authenticate(), wp_set_auth_cookie()
Хуки из функции

Возвращает

WP_User|WP_Error.

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

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

wp_signon( $credentials, $secure_cookie );
$credentials(массив)

Данные о пользователе, которого нужно авторизовать.

Если не указано, пытается получить из глобальной переменной $_POST

array(
	'user_login'    => $_POST['log'],
	'user_password' => $_POST['pwd'],
	'remember'      => $_POST['rememberme'],
)

По умолчанию: array() (из $_POST)

$secure_cookie(логический)

Нужно ли использовать защитные куки.

Какое имя куки использовать? Берется из констант:

  • При true - SECURE_AUTH_COOKIE
  • При false - AUTH_COOKIE.

По умолчанию: false - is_ssl()

Примеры

Пример авторизации на основе данных переданных в $_POST.

$user = wp_signon();

// авторизация не удалась
if ( is_wp_error($user) ) {
	echo $user->get_error_message();
}
0

#1 Пример авторизации пользователя Leonid:

$creds = array();
$creds['user_login'] = 'Leonid';
$creds['user_password'] = 'password';
$creds['remember'] = true;

$user = wp_signon( $creds, false );

if ( is_wp_error($user) ) {
   echo $user->get_error_message();
}
0

#2 Пример авторизации, через данные в $_POST.

Для этого передаем в $_POST, следующие данные и функция проведет авторизацию сама: "log", "pwd" и "rememberme":

// Допустим у нас уже определены переменные: $_POST['log'], $_POST['pwd'], $_POST['rememberme']
// тогда авторизация будет проходить следующим образом: 

$user = wp_signon();

if ( is_wp_error($user) ) {
   echo $user->get_error_message();
}

Заметки

  • Global. Строка. $auth_secure_cookie
  • Global. wpdb. $wpdb WordPress database abstraction object.

Список изменений

С версии 2.5.0 Введена.

Код wp_signon() WP 6.6.2

function wp_signon( $credentials = array(), $secure_cookie = '' ) {
	global $auth_secure_cookie, $wpdb;

	if ( empty( $credentials ) ) {
		$credentials = array(
			'user_login'    => '',
			'user_password' => '',
			'remember'      => false,
		);

		if ( ! empty( $_POST['log'] ) ) {
			$credentials['user_login'] = wp_unslash( $_POST['log'] );
		}
		if ( ! empty( $_POST['pwd'] ) ) {
			$credentials['user_password'] = $_POST['pwd'];
		}
		if ( ! empty( $_POST['rememberme'] ) ) {
			$credentials['remember'] = $_POST['rememberme'];
		}
	}

	if ( ! empty( $credentials['remember'] ) ) {
		$credentials['remember'] = true;
	} else {
		$credentials['remember'] = false;
	}

	/**
	 * Fires before the user is authenticated.
	 *
	 * The variables passed to the callbacks are passed by reference,
	 * and can be modified by callback functions.
	 *
	 * @since 1.5.1
	 *
	 * @todo Decide whether to deprecate the wp_authenticate action.
	 *
	 * @param string $user_login    Username (passed by reference).
	 * @param string $user_password User password (passed by reference).
	 */
	do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );

	if ( '' === $secure_cookie ) {
		$secure_cookie = is_ssl();
	}

	/**
	 * Filters whether to use a secure sign-on cookie.
	 *
	 * @since 3.1.0
	 *
	 * @param bool  $secure_cookie Whether to use a secure sign-on cookie.
	 * @param array $credentials {
	 *     Array of entered sign-on data.
	 *
	 *     @type string $user_login    Username.
	 *     @type string $user_password Password entered.
	 *     @type bool   $remember      Whether to 'remember' the user. Increases the time
	 *                                 that the cookie will be kept. Default false.
	 * }
	 */
	$secure_cookie = apply_filters( 'secure_signon_cookie', $secure_cookie, $credentials );

	// XXX ugly hack to pass this to wp_authenticate_cookie().
	$auth_secure_cookie = $secure_cookie;

	add_filter( 'authenticate', 'wp_authenticate_cookie', 30, 3 );

	$user = wp_authenticate( $credentials['user_login'], $credentials['user_password'] );

	if ( is_wp_error( $user ) ) {
		return $user;
	}

	wp_set_auth_cookie( $user->ID, $credentials['remember'], $secure_cookie );

	// Clear `user_activation_key` after a successful login.
	if ( ! empty( $user->user_activation_key ) ) {
		$wpdb->update(
			$wpdb->users,
			array(
				'user_activation_key' => '',
			),
			array( 'ID' => $user->ID )
		);

		$user->user_activation_key = '';
	}

	/**
	 * Fires after the user has successfully logged in.
	 *
	 * @since 1.5.0
	 *
	 * @param string  $user_login Username.
	 * @param WP_User $user       WP_User object of the logged-in user.
	 */
	do_action( 'wp_login', $user->user_login, $user );

	return $user;
}
11 комментариев
Полезные 1 Все
    Войти