Strapi用户注册接口数据入库后仍返回400错误,请求排查
问题排查:Strapi注册接口返回400但用户数据已存入数据库
问题根源
你提前使用bcrypt.hash加密了密码并传递给Strapi的/api/auth/local/register接口,但该接口会自动处理密码的哈希存储,不需要手动加密。
当你传递已加密的密码字符串时:
- Strapi会将该加密字符串当作原始明文密码,再次执行哈希逻辑,导致数据库中存储的密码是双重哈希后的结果,后续用户无法正常登录。
- 同时,Strapi的Users-Permissions插件会对传入的密码进行验证(比如密码长度、复杂度规则),加密后的字符串可能不符合插件的验证策略,触发400错误。
解决步骤
- 移除手动加密逻辑,直接将明文密码传递给注册接口:
//... try { const response = await axios.post( "http://localhost:1337/api/auth/local/register", { username, email: email.toLowerCase(), password: password, // 传递明文密码,由Strapi自动处理哈希 } ); // 处理成功响应 res.status(200).send(response.data); } catch (err) { console.log(err); // 返回Strapi提供的具体错误信息(如果存在) const errorData = err.response?.data || { message: err.message }; res.status(err.response?.status || 500).send({ message: ["Registration failed"], error: errorData }); } // ...
- 验证Strapi密码策略配置:
进入Strapi后台,依次点击Settings->Users & Permissions Plugin->Advanced Settings,检查Password Policy的配置(比如最小长度、是否需要包含特殊字符等),确保你的明文密码符合要求。
补充说明
关于用户数据已存入数据库的情况:这可能是Strapi 4.2.3版本的插件逻辑bug(先创建用户再执行密码验证),但核心问题还是手动加密密码导致的验证失败。修复后,接口会正常返回成功响应,且数据库中存储的是Strapi正确哈希后的密码,用户可正常登录。
内容的提问来源于stack exchange,提问作者Kymani
相关产品推荐
相关产品推荐

