Strapi v4通过API注册新用户返回400错误排查(Users&Permission)
问题成因
你遇到的400错误是Strapi v4.2.0版本调用注册接口的典型问题,控制台提示的2项Yup校验错误,基本都是以下原因导致:
- 未配置新用户默认角色:Users & Permissions插件的注册逻辑不会自动给新用户绑定角色,只要插件高级设置里没指定新用户默认角色,创建用户记录时就会触发
role关联字段的必填校验失败。 - User模型存在未传值的必填字段:要么是你手动给User集合类型添加了设为必填、且无默认值的自定义字段,注册请求体没带对应字段;要么是v4.2.0版本的已知bug——通过内容类型生成器修改过User模型后,会丢失
confirmed、blocked两个系统字段的默认值配置,导致系统字段校验失败。 - 参数格式错误:认证类接口和Strapi其他内容类型接口格式不同,如果照搬普通接口的规则把参数嵌套在
data字段里,也会触发必填字段校验失败。
正确注册流程
- 先修正插件基础配置
- 进入Strapi后台,打开「设置」-「Users & Permissions Plugin」-「高级设置」
- 找到「默认角色用于新用户」选项,下拉选中
Authenticated(已认证用户角色),禁止留空 - 没配置邮件服务的情况下,先关闭「Enable email confirmation(启用邮箱确认)」开关,避免发信逻辑触发额外报错;需要邮箱验证的话,先配好官方邮件发送插件再开启该功能
- 保存配置
- 检查User模型字段配置
- 打开「内容类型生成器」,找到Users & Permissions插件下的
User集合类型 - 所有自行添加的自定义字段,如果设为必填且没配置默认值,注册时必须在请求体里传对应值
- 检查系统字段:
confirmed、blocked两个字段不要手动改成必填,这两个字段默认由系统自动赋值,不需要前端传参
- 打开「内容类型生成器」,找到Users & Permissions插件下的
- 接口调用规范
- 请求方法固定为
POST - 请求地址:
http://localhost:1337/api/auth/local/register - 请求头必须携带
Content-Type: application/json - 无额外必填字段时,基础请求体格式如下,注意所有参数直接放在请求体最外层,不要嵌套
data字段:
{ "username": "testingg", "email": "test@gmail.com", "password": "password123" }注意:Strapi默认要求密码长度≥6位,如果你自定义过密码校验规则,传参需要符合对应规则。
- 如果有自定义必填字段,直接和三个基础字段平级放在请求体里即可,比如加了必填的
nickname字段:
{ "username": "testingg", "email": "test@gmail.com", "password": "password123", "nickname": "测试账号" } - 请求方法固定为
- 快速定位校验错误的方法
如果按上面步骤配置后还是报校验错误,直接打开项目路径下的node_modules/@strapi/utils/lib/validators.js文件,找到handleYupError方法,在方法内部加一行console.log(err.inner),重启项目再触发注册,控制台会直接打印出具体是哪几个字段校验失败、失败原因是什么,不需要盲猜。
内容的提问来源于stack exchange,提问作者Rizki Aprita
相关产品推荐
相关产品推荐

