wp 登录方法不像登录或设置 cookie 那样工作

问题描述 投票:0回答:1

大家好,我正在尝试修复 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() 时它不起作用

wordpress
1个回答
0
投票

您正在为现有用户使用 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 ] );
}
© www.soinside.com 2019 - 2024. All rights reserved.