【问题标题】:Sequelize validation using regular expression使用正则表达式进行验证
【发布时间】:2020-02-18 11:20:27
【问题描述】:

我正在尝试在用户模型中使用正则表达式来验证密码字段。但由于某种原因它不起作用。我检查了 sequelize 文档,它说验证应该在 createupdatesave 上自动运行。 Link to Docs on validation.

我尝试过使用is 和自定义验证器checkPassword。两者都没有返回任何错误。有人可以解释一下我在这里做错了什么吗?

这是我的用户模型

import { CustomError } from '../../utils/error';

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define(
    'User',
    {
      firstName: DataTypes.STRING,
      lastName: DataTypes.STRING,
      email: {
        allowNull: false,
        unique: true,
        type: DataTypes.STRING,
        validate: {
          isEmail: true
        }
      },
      password: {
        allowNull: false,
        type: DataTypes.STRING,
        validate: {
          checkPassword(value) {
            if (
              !/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,}$/.test(
                value
              )
            ) {
              throw new CustomError(400, 'Provide a valid password!');
            }
          },

          is: {
            args: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,}$/,
            msg:
              'The password must contain atleast 8 characters including at least 1 uppercase, 1 lowercase and one digit.'
          }
        }
      }
    },
    {}
  );
  User.associate = function(models) {
    User.hasMany(models.Post, {
      foreignKeyConstraint: true,
      foreignKey: 'userId'
    });
    User.hasMany(models.Comment, {
      foreignKey: 'userId',
      foreignKeyConstraint: true
    });
  };
  return User;
}

【问题讨论】:

    标签: node.js regex postgresql validation sequelize.js


    【解决方案1】:

    好的,我想通了。验证不起作用的原因是因为我已经对密码进行了哈希处理,因此它正在通过验证规则。现在,我已将验证移至从用户那里获取密码的位置。

    【讨论】:

      【解决方案2】:

      您可以使用以下方法来验证密码

      validate: {
            validatePassword: function(password) {
                          if(!(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,12}$/.test(password))) {
                              throw new Error('The password must contain at least 10 and maximum 12 characters including at least 1 uppercase, 1 lowercase, one number and one special character.');
                          }
                      }
                  },
      

      这里有一个不同的密码字符串检查正则表达式

      1. 最少十个字符,至少一个字母和一个数字:

      "^(?=.[A-Za-z])(?=.\d)[A-Za-z\d]{10,}$"

      1. 最少十个字符,至少一个字母、一个数字和一个特殊字符:

      "^(?=.[A-Za-z])(?=.\d)(?=.[@$!%#?& ])[A-Za-z\d@$!%*#?&]{10,}$"

      1. 最少 10 个字符,至少 1 个大写字母、1 个小写字母和 1 个数字:

      "^(?=.[az])(?=.[AZ])(?=.*\d)[a-zA-Z\d]{10,}$ "

      1. 最少 10 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:

      "^(?=.[az])(?=.[AZ])(?=.\d)(?=.[@$! %?&])[A-Za-z\d@$!%?&]{10,}$"

      1. 最少 10 个和最多 12 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:

      "^(?=.[az])(?=.[AZ])(?=.\d)(?=.[@$! %?&])[A-Za-z\d@$!%?&]{10,12}$"

      【讨论】:

        猜你喜欢
        • 2014-12-25
        • 2014-04-21
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多