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

调用REST API更新Dokan设置时JWT报404、基础认证报403问题

问题原因及修复方案

1. Basic Auth返回403错误的原因

  • 你用了用户登录密码生成Basic Auth凭证,WordPress REST API的Basic Auth校验要求使用应用专用密码,而非用户的常规登录密码,你需要到WP后台用户详情页生成应用密码后替换原有密码再生成认证头。
  • 你的请求头里认证字段名用了小写authorization,部分服务器配置会要求首字母大写Authorization,格式不匹配会触发auth header malformed报错。

2. JWT Auth返回404错误的原因

  • 服务器未配置Authorization头穿透规则:Apache/Nginx默认会过滤掉HTTP请求中的Authorization头,导致JWT插件无法拿到Token做校验,你需要修改站点的伪静态配置,放行Authorization头。
  • API地址拼接错误:检查rootUrl参数末尾是否带有多余的斜杠,拼接后是否出现//wp-json的异常格式,可直接访问拼接后的${rootUrl}wp-json/dokan/v1地址验证API是否正常可访问。
  • JWT插件未正确配置:确认你安装的JWT认证插件已开启REST API校验权限,且获取到的JWT Token未过期、权限范围包含Dokan设置修改权限。

3. 请求Body格式错误

你当前未指定Content-Type请求头,默认会用application/x-www-form-urlencoded格式提交数据,但Dokan更新设置API要求提交JSON格式数据,且你仅对address字段做了JSON序列化,整体格式不符合API要求。

修正后的代码示例

var jwtToken = await getUserJWTToken(emailAddress, password);
var bearerToken = 'Bearer $jwtToken';
// 注意:Basic Auth请替换为应用专用密码生成
// var basicAuth = 'Basic ' + base64Encode(utf8.encode('$emailAddress:$你的应用专用密码'));

final response = await httpPut(
  Uri.parse('${rootUrl}wp-json/dokan/v1/settings'),
  headers: {
    'Authorization': bearerToken,
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/json'
  },
  // 整个Body序列化为JSON
  body: jsonEncode({
    'store_name': storeName,
    'phone': phoneNumber,
    'address': {
      'street_1': street1,
      'street_2': street2,
      'city': city,
      'zip': zip,
      'country': country,
      'state': state
    }
  })
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:15:06