gpt4 book ai didi

php - 通过来自子域的 API 使用 Wordpress cookie 进行身份验证

转载 作者:行者123 更新时间:2023-12-05 07:43:00 24 4
gpt4 key购买 nike

我想在单独的 Laravel 安装中访问当前登录的 Wordpress 用户。

Wordpress 以 website.com 运行,我有一个带有 tool.website.com 的子域和 Laravel 应用程序(在另一台服务器上但相同的域)。

我正在使用 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');

我尝试过的事情:

  • 使用wp_get_current_user() 检索用户,这似乎需要一个随机数。我以多种不同的方式对 nonce 方法进行了数小时的试验,但我无法使其正常工作(返回 false 或 0)。我知道这是由于限制使用来自 Wordpress 外部的随机数。
  • 使用默认的原生API方式获取用户,同样需要随机数。
  • 阅读https://developer.wordpress.org/rest-api/手册、git 存储库和几篇在线文章/评论。
  • 考虑 OAuth 方法,但我不希望用户再次登录,因为他们在使用该工具时已经登录。
  • 发送帖子等内容没有问题,因此 API 连接不是问题。

我想知道我的方法是否正确。希望有人能给我一些指导。

最佳答案

我发现了以下解决方法:

- tool.website.com 将来自 tool.website.com 的 Cookie 作为发布数据发送到 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' );

这个解决方案看起来很稳定;希望它会帮助别人。如果还有其他解决方案,请在本主题中添加;因为我确信必须有不同的方法来实现这一目标。

关于php - 通过来自子域的 API 使用 Wordpress cookie 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com