调用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
相关产品推荐
相关产品推荐

