wp_signon возвращает пользователя, но пользователь не авторизован

4 нояб. 2010 г., 12:38:08
Просмотры: 25.8K
Голосов: 8

Я использую wp_signon() и она возвращает пользователя, а не ошибку. Однако когда я выполняю is_user_logged_in(), функция возвращает false.

Буду очень признателен за помощь :)

0
Все ответы на вопрос 5
3

Функция get_currentuserinfo() не сработала у меня. Я написал об этой проблеме и её решении в своём блоге:

http://blog.rhysgoodwin.com/programming/wordpress-wp_signon-current_user-is-not-populated/

С уважением, Риз

28 дек. 2010 г. 00:24:56
Комментарии

Это действительно помогло. На случай, если блог пропадёт, он сказал использовать wp_set_current_user() после wp_signon().

d79 d79
15 окт. 2015 г. 20:14:11

Сработало, брат.

User User
25 июл. 2018 г. 09:37:56

get_currentuserinfo() теперь устарел, но wp_get_current_user() работает у меня.

mistertaylor mistertaylor
2 мар. 2019 г. 00:52:33
2

После использования wp_signon() информация о пользователе не устанавливается, хотя именно так WordPress проверяет пользователя в функции is_user_logged_in(). Проблема решается простым вызовом get_currentuserinfo() после wp_signon().

4 нояб. 2010 г. 15:51:56
Комментарии

Можно ли имитировать вход пользователя через форму авторизации? Я хочу, чтобы пользователь оставался в системе, как при обычном входе.

User User
4 нояб. 2010 г. 16:13:24

Попробуйте $creds = array(); $creds['user_login'] = $user_login; $creds['user_password'] = $user_pass; $creds['remember'] = true; $user = wp_signon( $creds, false );, чтобы запомнить пользователя

Philip Seyfi Philip Seyfi
17 нояб. 2011 г. 21:49:58
0

У меня была такая же проблема. Вот полностью рабочий фрагмент кода, который решает эту проблему:

    if( isset($_POST['log']) && isset($_POST['pwd']) ):
      $creds = array( 'user_login' =>  $_POST['log'], 'user_password' => $_POST['pwd'], 'remember' => $_POST['rememberme'] );
      $user = wp_signon( $creds, false );
      if ( is_wp_error($user) ): echo $user->get_error_message(); endif;
      wp_set_current_user($user->ID);
      return $user;
    endif;

Также у wp_logout() есть аналогичная проблема. Вот как заставить его работать:

wp_logout();  
wp_set_current_user(0);
24 мая 2013 г. 17:16:56
1
 //функция wp_signon находится в разработке, если вы откроете файлы ядра WordPress
 //вы найдете этот комментарий

 // TODO стоит ли объявить устаревшим действие wp_authentication?

 //я нашел решение
 function login_after_register($userlogin,$userpass){
$credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

$secure_cookie = is_ssl();

$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
do_action('wp_login', $user->user_login, $user);
 }
 //затем вы должны вызвать ее таким образом
 //перед get_header() или любым HTML
 login_after_register($_POST['r_user_name'],$_POST['r_password']);
27 мая 2013 г. 00:35:47
Комментарии

Если это должен быть ответ, требуется некоторое пояснение. Пожалуйста, обновите ваш ответ.

fuxia fuxia
27 мая 2013 г. 00:41:32
0

Просто установите второй параметр в true. Установка false предотвратит установку безопасного cookie функцией wp_signon(), что необходимо для доступа к wp-admin.

$user = wp_signon( $credentials, true );
14 июн. 2021 г. 13:30:23