我想在单独的Laravel安装中访问当前登录的Wordpress用户。
Wordpress作为 website.com 运行,并且我使用Laravel应用程序(在另一台服务器上但是同一个域)上有 tool.website.com 的子域)。
我使用Native Wordpress API并创建了身份验证路径。
问题:
当我直接访问 / authenticate 路由时,将返回用户ID并正常工作。但是当我通过tool.website.com访问路线时, false 会被返回..
我工作过的事情
我已经创建了一个API请求,它在API调用中返回用户ID:
add_action( 'rest_api_init', function () {
register_rest_route( '/authenticate', array(
'methods' => 'GET',
'callback' => 'authenticate',
) );
} );
该功能如下所示:
$user_id = wp_validate_auth_cookie( $_COOKIE[LOGGED_IN_COOKIE], 'logged_in' );
WP cookie在子/主域上都可用。我可以看到他们是完全相同的。
define('COOKIE_DOMAIN', '.website.dev');
我尝试过的事情:
我想知道我的方法是否朝着正确的方向发展。希望有人可以给我一些指导。
答案 0 :(得分:0)
我找到了以下解决方法:
- tool.website.com 将Cookie从tool.website.com发送到API作为发布数据。
$cookie_array = $_COOKIE;
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($cookie_array)
)
);
$context = stream_context_create($options);
$data = file_get_contents(self::BASE_URL . "authenticate", false, $context);
- website.com
从Post数据中检索cookie,并使用Wordpress中的标准LOGGED_IN_COOKIE
常量来选择正确的(这可以重构为立即发送正确的cookie)。
// We retrieve the cookie (which is sadly not available through the API call alone)
$the_cookie = $request->get_body_params();
// As the cookie lives at domain level, we can use the same Cookie key in the WP API and other subdomains of this domain
// The cookie key remains the same
$user_id = wp_validate_auth_cookie( $the_cookie[LOGGED_IN_COOKIE], 'logged_in' );
这个解决方案似乎很稳定;希望它会帮助某人。如果还有其他解决方案,请在本主题中添加;因为我确信必须有不同的方法来实现这一点。