我在同一台服务器上运行了2个脚本:proXcore(根目录)和wordpress(子目录)。
我需要做的是:当用户登录proXcore时,用户会自动登录到wordpress。 注销也是如此。
当用户登录proXcore时,它确实会创建一个带有用户名的$_SESSION['username']
变量。
所以我利用这个来尝试完成我需要的东西。
到目前为止,我在我的functions.php中的wordpress主题是:
function custom_login_wp_and_pxc() {
// GET USER INFO. WE NEED THE ID!
$user = get_user_by( 'login', $_SESSION['username'] );
// SET THE COOKIE!
wp_set_auth_cookie( $user->ID, false, '' );
// USER NEEDS TO RELOAD THE PAGE 2 TIMES
// WE NEED TO FIND A FIX FOR THIS
// WE TRY THIS BUT IT DID NOT REDIRECTED PROPERLY
//wp_redirect( home_url() );
//exit;
}
// IF SESSION[USERNAME] EXISTS, THEN IT MEANS IT IS LOGGED IN INTO PROXCORE,
// THEREFORE, LOG THE USER INTO WORDPRESS
if( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) ){
// run it before the headers and cookies are sent
add_action( 'after_setup_theme', 'custom_login_wp_and_pxc' );
}
// IF SESSION[USERNAME] DOES NOT EXISTS, THEN IT MEANS IT IS NOT LOGGED IN INTO PROXCORE,
// THEREFORE, LOG OUT THE USER FROM WORDPRESS
else {
wp_logout();
}
它正在工作但有一点小故障。 如果我签到proxcore,然后我访问wordpress,我最初没有登录,我需要访问其他页面或wordpress的帖子。就在这时,我发现自己已经登录了。
我需要用户在第一次登陆访问时登录,而无需点击其他地方以使身份验证生效。
我希望我有道理。
这是我在这里使用的正确代码吗? 将此代码放在主题的functions.php中是否正确? 还有另一种方法可以实现这个目标吗?
感谢您的帮助!
答案 0 :(得分:0)
after_setup_theme
挂钩在WordPress对用户进行身份验证之前运行,因此您可能过早地设置了auth cookie。如何将其改为:
add_action( 'init', 'custom_login_wp_and_pxc' );
这将在WordPress创建用户并尝试进行身份验证后运行。
答案 1 :(得分:0)
我做到了!
我发布了代码,如果有人需要的话。
感谢大家的帮助和建议,因为你启发我找到解决方案。
function custom_login_wp_and_pxc() {
if( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) )
$session_username = $_SESSION['username'];
elseif ( isset( $_SESSION['adminusername'] ) and !empty( $_SESSION['adminusername'] ) )
$session_username = $_SESSION['adminusername'];
// GET USER INFO. WE NEED THE ID!
$user = get_user_by( 'login', $session_username );
// SET THE COOKIE!
wp_set_auth_cookie( $user->ID, false, '' );
}
// IF SESSION[USERNAME] EXISTS, THEN IT MEANS IT IS LOGGED IN INTO PROXCORE,
// THEREFORE, LOG THE USER INTO WORDPRESS
if( ( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) )
or ( isset( $_SESSION['adminusername'] ) and !empty( $_SESSION['adminusername'] ) ) ){
if(!is_user_logged_in()){
add_action( 'after_setup_theme', 'custom_login_wp_and_pxc' );
wp_redirect( home_url() );
}
}
// IF SESSION[USERNAME] DOES NOT EXISTS, THEN IT MEANS IT IS NOT LOGGED IN INTO PROXCORE,
// THEREFORE, LOG OUT THE USER FROM WORDPRESS
else {
wp_logout();
if(is_user_logged_in())
wp_redirect( home_url() );
}