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

jQuery Ajax基础认证仅外部可用,本地请求失效求解

WordPress REST API 本地请求权限问题解决

问题原因分析

你遇到的问题核心在于同域和跨域请求时WordPress REST API的认证机制差异:

  • 在jsfiddle这类跨域环境中,浏览器无法自动携带WordPress的登录Cookie,所以WordPress会 fallback 到你代码里的HTTP Basic认证(authorization头),只要服务器配置允许Basic Auth就能正常请求。
  • 但在本地同域请求时,WordPress优先使用Cookie认证,不会识别你传的Basic Auth头。而你的请求没有提供WordPress REST API要求的非ce(nonce)令牌,所以被判定为无权限访问,返回401错误。修改crossDomain参数不会改变这个认证逻辑,所以没用。

解决方案

你需要在AJAX请求的头中添加X-WP-NONCE字段,值通过WordPress内置的wp_create_nonce('wp_rest')函数生成,这个令牌是WordPress验证当前用户身份的关键。

更新后的完整代码示例:

var $ = jQuery; 
var makeBaseAuth = function(user, pswd){ 
  var token = user + ":" + pswd; 
  var hash = ""; 
  if (btoa) { 
    hash = btoa(token); 
  } 
  return "Basic " + hash; 
}; 

var settings = { 
  "crossDomain": true, 
  "url": "http://mywebsite.org/wp-json/wp/v2/settings", 
  "method": "GET", 
  "headers": { 
    "authorization": makeBaseAuth("admin", "mypassword"),
    "X-WP-NONCE": "<?php echo wp_create_nonce( 'wp_rest' ); ?>"
  } 
} 

$.ajax(settings) 
  .done(function(response){ 
    console.log(response); 
  }) 
  .error(function(err){ 
    console.log(err); 
  });

注意:这段代码需要放在WordPress的模板文件(比如functions.php或者自定义页面模板)中,确保PHP代码能被正常解析执行,生成有效的nonce值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:17