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

用户注册时触发isStrongPassword is not a function错误求助

问题解决:isStrongPassword is not a function

错误原因

你的代码存在两个核心问题:

  1. 导入错误:isStrongPassword 没有通过 require 导入,导致它只是一个字符串,而非可调用的函数。
  2. 规则不匹配:即便导入正确,validator库的isStrongPassword默认规则和你需要的(8字符、1大写、1小写、1数字、1符号)不完全一致,需要手动配置参数。

修复步骤

1. 修正导入语句

把原来的:

const isStrongPassword = ("validator/lib/isStrongPassword");

替换为:

const isStrongPassword = require("validator/lib/isStrongPassword");

2. 配置自定义密码验证规则

调用isStrongPassword时传入规则参数,确保符合你的要求:

else if (!isStrongPassword(req.body.password, {
  minLength: 8,
  minUppercase: 1,
  minLowercase: 1,
  minNumbers: 1,
  minSymbols: 1
})) {
  return next(
    createError(
      400,
      "Invalid password: Min 8 characters, 1 uppercase, 1 lowercase, 1 number, 1 symbol"
    )
  );
}

完整修正后的核心代码片段

const isEmail = require("validator/lib/isEmail.js")
const isStrongPassword = require("validator/lib/isStrongPassword");

//REGISTER
router.post("/register", async (req, res, next) => {
  try {
    if (!req.body.username) {
      return next(createError(400, "Invalid username"));
    } if (!req.body.email || !isEmail(req.body.email)) {
      return next(createError(400, "Invalid email"));
    } if (!req.body.password) {
      return next(createError(400, "Invalid password"));
    } else if (!isStrongPassword(req.body.password, {
      minLength: 8,
      minUppercase: 1,
      minLowercase: 1,
      minNumbers: 1,
      minSymbols: 1
    })) {
      return next(
        createError(
          400,
          "Invalid password: Min 8 characters, 1 uppercase, 1 lowercase, 1 number, 1 symbol"
        )
      );
    } else {
      // 后续用户检查、密码加密、保存逻辑保持不变
      const checkUsername = await User.findOne({ username: req.body.username });
      const checkEmail = await User.findOne({ email: req.body.email });
      if (checkUsername) {
        return next(createError(400, "Username taken"));
      } else if (checkEmail) {
        return next(createError(400, "Email taken"));
      } else {
        const salt = await bcrypt.genSalt(10);
        const hashedPass = await bcrypt.hash(req.body.password, salt);
        const newUser = new User ({
            username: req.body.username,
            firstName: req.body.firstName,
            lastName: req.body.lastName,
            email: req.body.email,
            password: hashedPass,
            repeatPassword: hashedPass,
            birthday: req.body.birthday,
        });
        const user = await newUser.save();
        res.status(200).json({
          message: "Successfully registered",
          user,
        });
      }
    }
  } catch(err) {
    next(err);
  }
});

内容的提问来源于stack exchange,提问作者sultan.h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:50:44