[英]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);
$user
是WP_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.