Использование функций входа в WordPress

4

Есть ли у кого-нибудь опыт написания пользовательской страницы входа в 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);
    }
}

Я пропустил что-то основное?

Теги:
customization

4 ответа

5

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

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

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

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

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

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

//Удостоверьтесь, что имя пользователя обновлено... Мне это нужно, поскольку крючок для user_register вызывается в wp_insert_user, но это hook вызывается после создания пользователя, поэтому ему нужна БД кеш ясно работает, иначе было установлено неправильное имя пользователя... Таким образом, пользователь был автоматически зарегистрирован только для одной страницы - смешно. (Это был регистр Plus 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
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();
    }
}
-2

Я сделал это в проекте несколько лет назад, поэтому код 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 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, но это могло измениться.

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

  • 0
    Нет сообщения об ошибке - ничего не происходит. wp_setcookie устарела.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню