2011-01-19 79 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(); 
    } 
}