is_user_logged_in() 在 wp_signon 后返回 false



>我正在使用自定义登录表单,这是代码。成功登录后,它会重定向到/portal 页面,但再次在门户页面中,用户登录状态为 false。

$email = $_REQUEST['login_email'];
$password = $_REQUEST['login_password'];
$args = array(
'orderby'      => 'login',
'order'        => 'ASC',
'fields'       => 'all'
);
$count=0;
$all_users = get_users( $args );
$login_data['user_password'] = $password;
$login_data['user_login'] = $email;
$login_data['remember'] = true;
$user_verify = wp_signon( $login_data, true );
$userID = $user_verify->ID;
do_action( 'wp_login', $email );
wp_set_current_user( $userID, $email );
wp_set_auth_cookie( $userID, true, false );

if ( is_wp_error($user_verify) ){
$loginerror = true;
$errors['login_error']=__("Error in login",'domain');
}
else{
$loginSuccess = true;
$_SESSION['login_email']=$email; // Initializing Session
if(empty($previous_location))
{
wp_safe_redirect( home_url('/portal/'));
}
else{
wp_safe_redirect($previous_location);
}
exit();
}

但是在/portal页面中,当我var_dump(is_user_logged_in())它返回 false。 这是怎么回事? 我做了什么?

我知道这个问题很老了,但我在这个问题上挣扎了这么久,我只想为下一个人分享我的知识。

我的问题是在页面重新加载时页面标题已经发送,因此导致 wp_signon() 正常工作出现问题。为了解决这个问题,我创建了这个函数并将其放在我的函数.php文件中:

add_action('template_redirect', 'my_check_login');
function my_check_login(){
if( is_page_template('custom-login.php') ){
global $wpdb; 
//SQL Escape all inputs
$email = $wpdb->escape($_POST['email']);  
$password = $wpdb->escape($_POST['password']);  
$remember = $wpdb->escape($_POST['rememberme']);  
if($remember) $remember = "true";  
else $remember = "false";
$login_data = array();  
$login_data['user_login'] = $email;  
$login_data['user_password'] = $password;  
$login_data['remember'] = $remember;  
$user_verify = wp_signon( $login_data, false );
if ( is_wp_error($user_verify) ) {  
echo "Invalid login details";  
} else {    
wp_set_current_user($user_verify->ID);
wp_set_auth_cookie($user_verify->ID,true);
echo "<script type='text/javascript'>window.location.href='". home_url() ."'</script>";
exit();  
}
} else {  
// Add user feedback here
//echo "Invalid login details";  
}  
}

其中我的自定义登录.php文件只是一个简单的形式:

<?php  
/** 
* Template Name: Login page 
*/  
get_header();   
?>  
<div class="background-light">
<div class="container">
<div class="row">
<div class="offset-3 col-6">
<form id="login1" class="registration-form" name="form" action="<?php echo home_url(); ?>/login/" method="post">
<input id="email" type="text" placeholder="Email" name="email"><br>  
<input id="password" type="password" placeholder="Password" name="password">  
<input id="submit" type="submit" name="submit" value="Submit">  
</form>
</div>
</div>
</div>
</div>

我也有同样的经历。事实证明,我的自定义注册机制是错误。我正在使用对象和插入方法使用自定义 sql 查询添加新用户$wpdb

不知何故,这种方法与后者的wp_signon用法相冲突。如果您还编写了自定义注册机制,请尝试回退到wp_insert_user方法,然后使用$wpdb->update更新自定义列或任何内容。

相关内容

  • 没有找到相关文章

最新更新