我们公司使用在不同平台和数据库(主要是 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 加密运行。