Node.js调用WordPress REST API上传文件遇401权限错误求助
WordPress REST API媒体上传401权限问题解决方法
错误原因
WordPress的/wp/v2/media REST端点要求请求者具备上传文件的权限(默认仅编辑者及以上角色用户拥有),你的请求未携带有效的身份认证信息,因此返回rest_cannot_create 401错误。
解决方案
方法一:使用Application Passwords(推荐,WordPress 5.6+内置支持)
创建应用程序密码
- 登录WordPress后台,进入「用户 > 你的个人资料」页面
- 找到「应用程序密码」板块,输入应用名称(如「媒体上传工具」)后点击「添加新应用程序密码」
- 保存生成的密码(格式为
xxxx xxxx xxxx xxxx,仅显示一次)
修改Node.js代码添加认证
更新你的app.js,在请求中加入Basic Auth认证,并修正FormData的请求头:axios = require('axios'); FormData = require('form-data'); // 替换为你的WordPress用户名和生成的应用程序密码 const WP_USERNAME = '你的用户名'; const WP_APP_PASSWORD = '生成的应用程序密码'; socket.on('uploadFile', function (data) { var formData = new FormData(); formData.append("image", data); // 生成Basic Auth凭证 const authToken = Buffer.from(`${WP_USERNAME}:${WP_APP_PASSWORD}`).toString('base64'); axios.post('https://fxalion.com/wp-json/wp/v2/media', formData, { headers: { ...formData.getHeaders(), // 自动生成multipart/form-data的正确头信息(包含boundary) 'Authorization': `Basic ${authToken}` } }) .then(res => console.log('上传成功:', res.data)) .catch(err => console.error('上传失败:', err.response.data)); });
方法二:使用Basic Auth插件(适配旧版WordPress)
- 安装并激活「WP REST API Basic Auth」插件
- 在请求头中添加Authorization,使用你的WordPress登录用户名和密码(必须确保站点使用HTTPS,避免密码泄露):
// 生成认证凭证(替换为你的用户名和密码) const authToken = Buffer.from('你的用户名:你的登录密码').toString('base64'); // 在axios请求的headers中添加 'Authorization': `Basic ${authToken}`
方法三:开放匿名上传权限(不推荐,存在安全风险)
如果不需要身份验证(仅测试或特殊场景),可以通过修改主题functions.php开放权限:
add_filter('rest_upload_image', function($caps, $cap, $args, $user){ if ($cap === 'upload_files') { return ['read']; // 允许所有访问站点的用户上传文件 } return $caps; }, 10, 4);
额外注意事项
- 前端Socket.IO传输文件时,确保服务器端Socket.IO配置支持二进制数据传输(默认已支持,但如果有自定义配置需检查)
- 不要手动设置
Content-Type: multipart/form-data,使用formData.getHeaders()自动生成,避免缺少boundary导致表单解析失败
内容的提问来源于stack exchange,提问作者peyman jalili
相关产品推荐
相关产品推荐

