Использование функций входа в WordPress - PullRequest
4 голосов
/ 19 января 2011

Кто-нибудь имеет опыт написания пользовательской страницы входа в Wordpress с использованием функций:

wp_signon()
and wp_set_auth_cookie()

найдено на http://codex.wordpress.org/Function_Reference/

Я не могу заставить их работать.

Код выглядит примерно так:

function login_wordpress($username, $password) {
    $creds = array();
    $creds['user_login'] = $username;
    $creds['user_password'] = $password;
    $creds['remember'] = true;
    $user = wp_signon( $creds, false );
    if ( is_wp_error($user) ) {
       echo $user->get_error_message();
       die();
    } else {
         wp_set_auth_cookie( $user, 0, 0);
    }
}

Мне не хватает чего-то простого?

Ответы [ 4 ]

7 голосов
/ 11 января 2012

Вам необходимо изменить эту строку:

wp_set_auth_cookie( $user, 0, 0);

На это:

wp_set_auth_cookie( $user->ID, 0, 0);

$user - это WP_User Объект, а не идентификатор пользователя.

wp_signon возвращает WP_Error при ошибке или WP_User при успехе.

3 голосов
/ 07 января 2013

У меня были настоящие проблемы ... наконец-то он заработал ... !!(после нескольких дней экспериментов и ударившись головой об это)

Одна вещь, которую нужно убедиться, это то, что вы еще не отправили вывод, или файл cookie сеанса не запишет, как это должно быть в заголовке,Также, если вы вызываете wp_signon до начала сеанса, там информация о сеансе также теряется ... блин ... странно, но у меня обоих случалось со мной.Anyhoo no more ado ...

// Создать нового пользователя (например)

$userdata = array('user_login'->$username,'user_pass'->$password);
$user_id = wp_insert_user($userdata);

// Убедитесь, что имя пользователя обновлено ... Мне нужно это, так как былперехватить user_register, вызываемый в wp_insert_user, но этот перехватчик вызывается после создания пользователя, поэтому для работы ему необходимо очистить кэш БД, в противном случае было задано неправильное имя пользователя ... Таким образом, пользователь автоматически вошел в системутолько для одной страницы - смешно.(Между прочим, это было Регистрация плюс Redux) *

wp_cache_delete($user_id, 'users');
wp_cache_delete($username, 'userlogins');
$userdata = get_userdata($user_id);
$username = $userdata->user_login;

// Убедитесь, что сессия пользователя началась

$vsessionid = session_id();
if (empty($vsessionid)) {session_name('PHPSESSID'); session_start();}

// Логин текущего пользователя

wp_clear_auth_cookie();
$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon($creds, false);

// Проверка работоспособности

if (is_wp_error($user)) {$error = $user->get_error_message();}
else {
    wp_set_current_user($user_id);
    // The next line *really* seemed to help!
    do_action('set_current_user');
    $current_user = wp_get_current_user();
    if (is_wp_error($current_user)) {$error = $user->get_error_message();}
}

if ($error) {echo $error; print_r($userdata); print_r($current_user);}
1 голос
/ 22 сентября 2015
current_user();

function current_user()
{
    global $current_user,$user_ID;

    if(is_user_logged_in())
    {
        echo 'User Logged in '.$user_ID;
    }
    else {
        echo 'No user is logged in< br/>';
        custom_login();
    }
}

function custom_login() {
    $creds = array('user_login' => '<USERNAME>', 'user_password' =>   '<USERPASSWORD>', 'remember' => true );
    $user = wp_signon( $creds, false );
    wp_set_current_user($user->ID); 
    wp_set_auth_cookie($user->ID, true, false );    
    do_action( 'wp_login', '<USERNAME>' );

    if ( is_wp_error($user) )
        echo $user->get_error_message();
    }
}
0 голосов
/ 20 января 2011

Я делал это в проекте несколько лет назад, поэтому код Wordpress был немного другим. Но этот код работал для меня:

// include the wordpress files necessary to run its functions
include('../classpages/wp-config.php'); // this includes wp-settings.php, which includes wp-db.php, which makes the database connection
include(ABSPATH . WPINC . '/pluggable-functions.php');

// use wordpress's function to create the login cookies
// this creates a cookie for the username and another for the hashed password, which wordpress reauthenticates each time we call its wp_get_current_user() function
wp_setcookie($user_login, $user_pass, false, '', '', $cookieuser);

Мне вообще не приходилось использовать wp_signon, но это могло измениться.

Получаете ли вы сообщение об ошибке или что вы видите, когда запускаете свой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...