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

wp_signon() WP 2.5

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

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

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

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

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

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

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

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

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

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

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

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

$secure_cookie(логический)
Нужно ли использовать защитные куки. Какое имя куки использовать, для ssl (защищенное) или нет? берется из констант: SECURE_AUTH_COOKIE или AUTH_COOKIE.
По умолчанию: false - is_ssl()

Примеры

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

$user = wp_signon();

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

#2. Пример авторизации пользователя 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();
}

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

Код wp signon: wp-includes/user.php WP 4.9

<?php
function wp_signon( $credentials = array(), $secure_cookie = '' ) {
	if ( empty($credentials) ) {
		$credentials = array(); // Back-compat for plugins passing an empty string.

		if ( ! empty($_POST['log']) )
			$credentials['user_login'] = $_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 );

	global $auth_secure_cookie; // 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) ) {
		if ( $user->get_error_codes() == array('empty_username', 'empty_password') ) {
			$user = new WP_Error('', '');
		}

		return $user;
	}

	wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie);
	/**
	 * 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;
}

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

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

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

wp_signon 8 комментариев
  • Юра

    жаль нету кнопочки донате

    Ответить4.5 года назад #
  • Pahar @

    Добрый день вам) Подскажите, если не трудно, ответ на такой вопрос. Делаю авторизацию через соцсети. Никаких плагинов. Получаю все данные пользователя, а вот как его авторизировать? Пароля то нет. Подставить в поле пароль его id(из соцсети) не хорошо, легко будет ломануть + если пользователь сменит пароль то он захешируется и я польше не смогу при авторизации через соцсети залогинить его, не буду знать пароль. Весь день голову ломаю. Можно ли как-то с помощью функции wp_signon() авторизировать но без пароля?

    Ответить2.5 года назад #
    • Kama4660

      Что-то у вас логика непонятная. Возможно вам поможет функция wp_set_auth_cookie() unknw

      1
      Ответить2.5 года назад #
      • Pahar @

        Ей и воспользовался тогда, спасибо) Я тогда только осваивал WP. Сейчас даже смешно за такой вопрос))
        Спасибо вам большое за сайт, очень помог при изучении и в работе до сих пор помогает. Начинаю разработку и сразу в functions кидаю вашу функцию пагинации и вывода краткого описания.
        Ещё раз, ОГРОМНОЕ СПАСИБО ЗА САЙТ! smile

        1
        Ответить1.2 года назад #
  • Райнур

    Здравствуйте, делаю аавторизацию свою, выводит ошибку о том, что уже были переданы данные клиенту(header ошибка). И я так понимаю он не может сменить куки данные и таким образом не авторизовывает, как быть?

    Ответить1.2 года назад #
    • Kama4660

      Установка кук, в данном случае сама авторизация должна проходить до того как что-либо будет выведено на экран... Походу тут у вас ошибка.

      Ответить1.2 года назад #
      • Райнур

        Это все понятно) Но с архитектурой WP не особо знаком, куда этот код можно перенести внутри темы? Сейчас я создал файл page-login.php, там описал это все, форму и процесс авторизации. Вот куда я могу процесс авторизаци скинуть внутри темы? Редактирую стандартную тему twentyfiften

        в начало header короче поместил процесс аворизации

        Ответить1.2 года назад #
  • avense5 cайт: videovegas.ru

    А можно как то на WordPress использовать для авторизации уже зашифрованный пароль?
    То есть что бы не передавать открытый пароль в POST, а зашифровать его средствами JS таким же методом как он зашифрован в WordPress(wp_hash_password), а после на сервере сверить и авторизировать если пароли совпадают?

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

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