大家好,我正在尝试修复 WordPress 网站中的错误 问题是,当我尝试注册新用户时,它可以工作,但他们没有登录,或者需要一些时间才能显示已登录的用户
这是我的功能,也是我使用的最后一个方法
public function verifyCode() {
$phone = $this->_preparePhoneNumber();
$this->_verifyOtp( $phone );
$user = get_user_by( 'login', $phone );
$isRegistration = false;
$user_password = wp_generate_password();
if ( ! $user ) {
$userId = wp_create_user( $phone, $user_password, $phone . '@persiapartstore.com' );
$user = new WP_User( $userId );
$user->set_role( $_POST['isVendor'] ? 'seller' : 'customer' );
$isRegistration = true;
$credentials = array(
'user_login' => $phone,
'user_password' => $user_password,
'remember' => true,
);
$user = wp_signon( $credentials, false );
} else {
$userId = $user->ID;
wp_set_current_user( $userId );
wp_set_auth_cookie( $userId );
}
wp_send_json_success( [ ...$this->_getLoginResponse( $user ), 'isRegistration' => $isRegistration ] );
}
顺便说一句,当用户存在时我的登录可以正常工作 但是当我创建新用户时它没有登录 感谢您的帮助
wp cookie 在注册后在我的浏览器中设置,但是当我尝试 is_user_logged_in() 时它不起作用
您正在为现有用户使用 wp_set_current_user 和 wp_set_auth_cookie,但不为新用户使用。这些函数对于设置当前用户至关重要,还有很多需要修复的地方,我已经修改了你的代码,请检查
public function verifyCode() {
$phone = $this->_preparePhoneNumber();
$this->_verifyOtp( $phone );
$user = get_user_by( 'login', $phone );
$isRegistration = false;
if ( ! $user ) {
$user_password = wp_generate_password();
$userId = wp_create_user( $phone, $user_password, $phone . '@persiapartstore.com' );
$user = get_user_by( 'id', $userId ); // Reload user data
$user->set_role( $_POST['isVendor'] ? 'seller' : 'customer' );
$isRegistration = true;
wp_set_current_user( $userId );
wp_set_auth_cookie( $userId, true ); // Set the login cookie
} else {
$userId = $user->ID;
wp_set_current_user( $userId );
wp_set_auth_cookie( $userId );
}
wp_send_json_success( [ ...$this->_getLoginResponse( $user ), 'isRegistration' => $isRegistration ] );
}