React Native调用WordPress JWT Auth报错 Postman正常如何解决
问题根因
现有React代码中的Axios请求写法不符合JWT Auth插件的接口要求,和Postman发出的正常请求结构不一致,最终触发jwt_auth_no_auth_header报错,具体问题点:
- Axios的
post方法第二个参数会直接作为请求体发送,现有代码额外包裹了body属性、还手动执行了JSON序列化操作,最终发出的请求体是无效嵌套结构{"body":"{\"username\":\"xxx\",\"password\":\"xxx\"}"},插件无法从请求根节点读取到用户名、密码参数 - 未显式声明请求头
Content-Type: application/json,部分React Native运行环境下Axios会默认使用application/x-www-form-urlencoded格式发送请求,插件解析JSON参数失败就会抛出无鉴权头的错误。Postman发送请求时会自动匹配参数对应的Content-Type,参数也直接放在请求根节点,所以能正常返回jwt_auth_valid_credential结果。
注意:不要把fetch API的传参逻辑直接套用到Axios上,二者的请求体传参规则有明显区别。
修复方法
调整submitLogin函数内的请求逻辑,去掉多余的body层级包裹和手动JSON序列化操作,显式声明正确的请求头即可,修正后的代码片段:
function submitLogin() { axios.post( apiurl, // 直接传入用户名密码对象,Axios会自动完成JSON序列化 { username: username, password: password }, { headers: { "Content-Type": "application/json" } } ) .then(function(response) { console.log('接口返回:', response.data) // 拿到有效token后可存入本地持久化存储,后续需要鉴权的接口请求,将token放到Authorization请求头中即可完成身份校验 }) .catch(function(err) { console.log('请求错误:', err.response?.data || err.message) }) }
排查补充
修复后可通过抓包对比端上请求和Postman请求的结构,确认参数直接放在请求体根节点、无嵌套body字段即可正常调用。如果修复后Postman仍可正常调用但端上持续报错,再排查站点伪静态规则是否过滤了Authorization头即可,当前场景下无需优先排查该配置。
内容的提问来源于stack exchange,提问作者Rollor
相关产品推荐
相关产品推荐

