You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress后端PHP函数无法获取JWT Token用于外部API请求

解决方案:PHP无法获取JWT Cookie的排查与修复

1. 跨域Cookie的Domain匹配问题

你Node.js后端设置的Cookie Domain为3vbp2t1s-8000.euw.devtunnels.ms,需确认WordPress站点域名是否与该值完全一致,或是它的子域名。若WordPress为子域名(如xxx.3vbp2t1s-8000.euw.devtunnels.ms),需将Cookie的Domain改为带前缀点的格式,允许子域名共享:

res.cookie("Token", jwtToken, {
  path: "/",
  httpOnly: true,
  secure: true,
  sameSite: "None",
  domain: ".3vbp2t1s-8000.euw.devtunnels.ms" // 前缀加.,支持子域名共享
});

2. 确保AJAX请求携带Cookie

Elementor/WPForms的表单若为AJAX提交,需强制开启withCredentials,否则浏览器不会发送跨域Cookie。添加以下自定义JS到主题或Elementor的脚本区域:

document.addEventListener('wpformsAjaxSubmit', function(event) {
  event.detail.xhr.withCredentials = true;
});

3. 检查WordPress安全配置

部分安全插件(如Wordfence)或主题设置可能过滤Cookie,同时需确认wp-config.php中的Cookie相关常量配置正确:

// 与Cookie的domain保持一致
define('COOKIE_DOMAIN', '.3vbp2t1s-8000.euw.devtunnels.ms');
// 确保HTTPS环境下Cookie正常传输
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

4. 验证Cookie传输链路

打开浏览器开发者工具的Network面板,查看表单提交请求的Request Headers:

  • 若没有Cookie: Token=xxx行,说明浏览器未发送Cookie,回到跨域配置和withCredentials设置排查;
  • 若存在但PHP的$_COOKIE无法读取,检查是否有服务器层面的Cookie拦截规则(如Nginx配置)。

5. 替代方案:通过表单隐藏字段传递Token

若以上方法无效,可临时调整Cookie配置(降低安全性),通过前端将Token写入表单隐藏字段:

  1. 修改Node.js的Cookie配置,关闭httpOnly:
res.cookie("Token", jwtToken, {
  path: "/",
  secure: true,
  sameSite: "None",
  domain: ".3vbp2t1s-8000.euw.devtunnels.ms"
});
  1. 在WPForms中添加名为jwt_token的隐藏字段,用JS填充Token:
document.addEventListener('DOMContentLoaded', function() {
  const tokenMatch = document.cookie.split('; ').find(row => row.startsWith('Token='));
  if (tokenMatch) {
    document.querySelector('input[name="jwt_token"]').value = tokenMatch.split('=')[1];
  }
});
  1. 在PHP函数中读取该字段:
$jwt_token = isset($_POST['jwt_token']) ? $_POST['jwt_token'] : null;

内容的提问来源于stack exchange,提问作者m__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:00:02