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