簡體   English   中英

使用wordpress登錄功能

[英]Using wordpress login functions

有沒有人有使用這些功能編寫自定義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);
    }
}

我錯過了什么基本的東西?

您需要更改此行:

wp_set_auth_cookie( $user, 0, 0);

對此:

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

$userWP_User對象而非用戶ID。

wp_signon返回WP_Error失敗,或WP_User成功。

我自己真的遇到了麻煩......終於有了工作...... !! (經過幾天的實驗和撞擊它之后)

要確保的一件事是你還沒有發送任何輸出,或者會話cookie不會寫入,因為它需要在標題中。 此外,如果你在會話開始之前調用wp_signon,那么會話信息也會丟失......謝謝...奇怪但我發生了兩件事。 Anyhoo沒有更多的...

//創建新用戶(例如)

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

//確保用戶名是最新的...我需要這個,因為在wp_insert_user中調用了user_register的鈎子但是創建用戶之后調用了該鈎子,所以它需要一個數據庫緩存清除工作,否則用戶名錯誤已設置...所以用戶只能自動登錄一頁 - 荒謬。 (這是寄存器加Redux做掛鈎btw。)

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

我幾年前在一個項目中做過這個,所以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,但這可能已經改變了。

您是否收到錯誤消息,或者在運行代碼時看到了什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM