0

我们公司使用在不同平台和数据库(主要是 WordPress)上运行的多个网站。我正在尝试在这些网站之间建立集成。

如果用户在我们的一个网站上登录他们的帐户,则需要在我们的其他网站上进行自动登录。

为此,我正在尝试使用 WordPress API:

add_action('rest_api_init', function(){
    register_rest_route(
        'odp-api/v1',
        '/universal-login',
        array(
            'methods' => 'POST',
            'callback' => 'universal_login'
        )
    );
});
function universal_login(WP_REST_Request $request){
    $feedback = array();
    $posted = $request->get_body_params();

    if(isset($posted['user_login']) && isset($posted['user_password'])){
        $posted['remember'] = (isset($posted['remember']) ? $posted['remember']: 0);

        $user = wp_signon($posted, is_ssl());

        if(!is_wp_error($user)){
            $feedback['success'] = 'Success';
        } else{
            $feedback['error'] = $user->get_error_message();
        }
    } else{
        $feedback['error'] = 'Invalid account credentials.';
    }

    return $feedback;
}

上面的 action 和 function 注册了一个自定义的 API 路由,我通过以下方式调用它:

$response = wp_safe_remote_post(
                ODP_UNIVERSAL_URL . 'wp-json/odp-api/v1/universal-login',
                array(
                    'method' => 'POST',
                    'body' => array(
                        'user_login' => $user_login,
                        'user_password' => $user_password,
                        'remember' => (isset($_POST['rememberme']) && $_POST['rememberme'] === 'forever' ? 1 : 0)
                    )
                )
            );

我收到 $feedback 成功消息并且可以访问刚刚登录的用户数据,但是当访问该网站时,很明显我/用户实际上并未登录。

从我在网上找到的内容来看,它似乎与 COOKIE_DOMAIN 定义有关,或者与 NONCE 验证有关。

为什么远程成功获取用户但未登录?

有没有更简单的方法让用户使用 WordPress 远程登录?

这个想法是能够从一个 WordPress 安装登录,并自动登录到另一个域上的另一个 WordPress 安装。我们所有的网站都通过 SSL 加密运行。

4

0 回答 0