如何在Strapi用户注册时将自定义字段设为必填项
解决Strapi用户注册时
nickname字段必填的问题 你遇到的问题核心是:Strapi自带的users-permissions插件默认注册流程只校验系统原生字段(如username、email、password),即便你在User集合的schema里设置了nickname为必填,插件也不会自动将其纳入注册校验逻辑。下面是两种可行的解决方案:
方法一:通过后台配置添加注册校验参数
这是最简便的方式,适合无需额外复杂逻辑的场景:
- 登录Strapi后台,进入设置 -> Users & Permissions 插件 -> 高级设置
- 在注册参数区域,找到
nickname字段,勾选它的必填选项 - 保存配置后,再次调用
/api/auth/local/register接口时,会强制校验请求体中是否包含符合规则的nickname字段
方法二:自定义注册控制器(灵活扩展)
如果需要对nickname做更复杂的校验或额外处理,可以覆盖插件的注册控制器:
- 在项目根目录创建文件
src/extensions/users-permissions/controllers/auth.js - 写入以下代码:
const authController = require('@strapi/plugin-users-permissions/server/controllers/auth'); module.exports = { async register(ctx) { const { nickname } = ctx.request.body; // 自定义校验逻辑:检查nickname是否存在且长度符合要求 if (!nickname) { return ctx.badRequest('nickname字段为必填项'); } if (nickname.length < 6) { return ctx.badRequest('nickname长度不能少于6个字符'); } // 调用插件原有的注册逻辑 const result = await authController.register(ctx); return result; }, };
- 重启Strapi服务,此时注册接口会先执行你自定义的校验逻辑,再完成注册流程
补充说明
你已经在User集合的schema中设置了nickname的required: true,数据库层面会自动校验该字段非空,结合上面的接口校验,就能确保注册时nickname必须传入且符合规则;如果使用方法一,建议保持后台配置的校验规则和schema中的规则一致(比如minLength)。
内容的提问来源于stack exchange,提问作者Ballazx
相关产品推荐
相关产品推荐

