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

Strapi用户注册接口数据入库后仍返回400错误,请求排查

问题排查:Strapi注册接口返回400但用户数据已存入数据库

问题根源

你提前使用bcrypt.hash加密了密码并传递给Strapi的/api/auth/local/register接口,但该接口会自动处理密码的哈希存储,不需要手动加密。

当你传递已加密的密码字符串时:

  • Strapi会将该加密字符串当作原始明文密码,再次执行哈希逻辑,导致数据库中存储的密码是双重哈希后的结果,后续用户无法正常登录。
  • 同时,Strapi的Users-Permissions插件会对传入的密码进行验证(比如密码长度、复杂度规则),加密后的字符串可能不符合插件的验证策略,触发400错误。

解决步骤

  1. 移除手动加密逻辑,直接将明文密码传递给注册接口:
//...
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 
  });
}
// ...
  1. 验证Strapi密码策略配置:
    进入Strapi后台,依次点击Settings -> Users & Permissions Plugin -> Advanced Settings,检查Password Policy的配置(比如最小长度、是否需要包含特殊字符等),确保你的明文密码符合要求。

补充说明

关于用户数据已存入数据库的情况:这可能是Strapi 4.2.3版本的插件逻辑bug(先创建用户再执行密码验证),但核心问题还是手动加密密码导致的验证失败。修复后,接口会正常返回成功响应,且数据库中存储的是Strapi正确哈希后的密码,用户可正常登录。

内容的提问来源于stack exchange,提问作者Kymani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:06:27