>我正在使用自定义登录表单,这是代码。成功登录后,它会重定向到/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
更新自定义列或任何内容。