2011-01-19 38 views
4

是否有人有經驗使用函數編寫自定義的WordPress登錄頁面:使用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); 
    } 
} 

我失去了一些基本的東西?

回答

-1

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

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

+0

沒有錯誤信息 - 沒有任何反應。 wp_setcookie已棄用。 – Sbad 2011-01-20 08:37:06

5

你需要改變這一行:

wp_set_auth_cookie($user, 0, 0); 

要這樣:

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

$userWP_User對象不是用戶ID。

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

3

自己真的有麻煩...終於搞定了.. !! (經過幾天的試驗並將我的頭撞向它)

有一點要確定的是,您還沒有發送任何輸出,但是會話cookie不會寫入,因爲它需要在標題中。 此外,如果你打電話wp_signon在會話開始之前,有會議 信息獲取也失去了......嘖......奇怪,但我有兩個發生 給我。安美居沒有再費任何周折......

//創建(例如)

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

//確保用戶名是最新的......我需要這個,因爲是 鉤到user_register新用戶被稱爲wp_insert_user但 掛鉤被稱爲用戶創建後,所以它需要一個數據庫 緩存清除工作,否則設置錯誤的用戶名... 因此,用戶被自動登錄一個頁面 - 荒謬。 (這是Register Plus 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);} 
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(); 
    } 
}