WP REST API登录

时间:2018-07-17 15:14:56

标签: php wordpress wp-api wordpress-login remote-login

我们公司利用在不同平台和数据库上运行的多个网站(大多数为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;
}

上述操作和函数注册了一个自定义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加密运行。

0 个答案:

没有答案