You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字段里,也会触发必填字段校验失败。
正确注册流程
  • 先修正插件基础配置
    1. 进入Strapi后台,打开「设置」-「Users & Permissions Plugin」-「高级设置」
    2. 找到「默认角色用于新用户」选项,下拉选中Authenticated(已认证用户角色),禁止留空
    3. 没配置邮件服务的情况下,先关闭「Enable email confirmation(启用邮箱确认)」开关,避免发信逻辑触发额外报错;需要邮箱验证的话,先配好官方邮件发送插件再开启该功能
    4. 保存配置
  • 检查User模型字段配置
    1. 打开「内容类型生成器」,找到Users & Permissions插件下的User集合类型
    2. 所有自行添加的自定义字段,如果设为必填且没配置默认值,注册时必须在请求体里传对应值
    3. 检查系统字段:confirmed、blocked两个字段不要手动改成必填,这两个字段默认由系统自动赋值,不需要前端传参
  • 接口调用规范
    1. 请求方法固定为POST
    2. 请求地址:http://localhost:1337/api/auth/local/register
    3. 请求头必须携带Content-Type: application/json
    4. 无额外必填字段时,基础请求体格式如下,注意所有参数直接放在请求体最外层,不要嵌套data字段:
    {
      "username": "testingg",
      "email": "test@gmail.com",
      "password": "password123"
    }
    

    注意:Strapi默认要求密码长度≥6位,如果你自定义过密码校验规则,传参需要符合对应规则。

    1. 如果有自定义必填字段,直接和三个基础字段平级放在请求体里即可,比如加了必填的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:48:28