使用JWT插件调用WordPress API获取Token时Promise持续pending
问题描述
使用JWT插件对接WordPress API发布内容时遇到异常:已按JWT插件官方文档指引完成全部配置,定义了auth secret key,也完成了.htaccess文件修改,但调用接口时始终得到处于pending状态的Promise,实现代码如下:
fetch('https://mangareadhere.xyz/wp-json/jwt-auth/v1/token',{ method: "POST", headers:{ 'Content-Type': 'application/json', 'accept': 'application/json', }, body:JSON.stringify({ "username": username, "password": password }) }).then(function(response){ return response.json() }).then(function(user){ console.log(user.token) localStorage.setItem('jwt', user.token) }); }
按文档说明尝试获取用户Token时,Promise始终卡住无法返回结果。
解决排查步骤
- 首先补全请求的错误捕获与状态判断逻辑:现有代码没有异常捕获分支,也没有判断HTTP响应状态,请求出错时不会抛出明确提示,只会表现为无响应。先替换为带错误处理的代码,在控制台查看具体报错信息:
fetch('https://mangareadhere.xyz/wp-json/jwt-auth/v1/token',{ method: "POST", headers:{ 'Content-Type': 'application/json', 'accept': 'application/json', }, body:JSON.stringify({ "username": username, "password": password }) }).then(function(response){ if (!response.ok) { return response.text().then(errText => { throw new Error(`HTTP错误 ${response.status}: ${errText}`) }) } return response.json() }).then(function(user){ console.log(user.token) localStorage.setItem('jwt', user.token) }).catch(function(err) { console.error('Token请求失败:', err) })
- 排查跨域(CORS)问题:打开浏览器开发者工具的Network面板,找到对应的token请求,如果控制台出现CORS相关报错,说明服务端没有配置正确的跨域响应头。WordPress和JWT插件默认不自带跨域处理,需要在服务端配置允许你的前端域名访问
/wp-json路径,同时放行OPTIONS方法的预检请求。 - 确认Web服务规则生效:如果站点用的是Nginx而非Apache,修改.htaccess文件完全不会生效,需要把JWT插件要求的重写规则写到Nginx对应的站点配置文件中,重载Nginx服务后再测试;如果是Apache环境,确认.htaccess文件存放在WordPress安装根目录,且Apache开启了rewrite模块。
- 校验JWT密钥配置位置:确认
JWT_AUTH_SECRET_KEY常量定义在wp-config.php文件中,且位置在/* That's all, stop editing! Happy publishing. */注释行之前,写在该行之后的配置不会被WordPress加载。 - 排查安全拦截规则:临时关闭WordPress安装的安全类插件(如Wordfence、防注入插件),检查服务器WAF、防火墙规则,确认没有拦截向
/wp-json/jwt-auth/v1/token路径发送的POST请求。
内容的提问来源于stack exchange,提问作者Webnair
相关产品推荐
相关产品推荐

