足以验证重复的用户名吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了足以验证重复的用户名吗?相关的知识,希望对你有一定的参考价值。

所以我有这个组织的续集模型:

module.exports = (sequelize, Sequelize) => 
    const Organization = sequelize.define("organization", 
      id: 
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,
        allowNull: false
      ,
      organizationName: 
        type: Sequelize.STRING,
        allowNull: false,
        notEmpty: true,
        unique: 
          args: 'username',
          msg: 'This username is already taken!'
        
      ,
      emailAddress: 
        type: Sequelize.STRING,
        allowNull: false,
        validate: 
          isEmail: true
        ,
        unique: 
          args: 'email',
          msg: 'The email is already taken!'
       
      ,
      physicalAddress: 
        type: Sequelize.STRING,
        allowNull: true
      ,
      city: 
          type: Sequelize.STRING,
          allowNull: false
      ,
      country: 
          type: Sequelize.STRING,
          allowNull: false
      ,
      phone: 
          type: Sequelize.INTEGER,
          allowNull: true
      ,
      websiteAddress: 
          type: Sequelize.STRING,
          allowNull: true
      
    , 
        timestamps: false,
        underscored: true,
        freezeTableName: true
    );

    return Organization;
  ;

当用户向新组织注册时,我要确保输入的用户名是唯一的。

我的问题是...我的实施够吗?还是我应该在插入之前做一个organization.find

它确实有效,但我很担心。

我知道,使用上述方法,即使验证失败,ID也会自动递增。但是还有其他问题吗?

答案

如果名称不是唯一的,您将依靠数据库排除错误。这实际上应该是万不得已的做法,建议您在尝试插入之前查询表。但是,您可以查看upsert样式的操作,例如findOrCreate

附加思想:如果保留现有用户名的缓存列表并搜索before,然后尝试进行插入-作为验证过程的一部分,则对数据库的压力将减少,可伸缩性更好,并为用户带来更好的体验。理想情况下,当用户输入组织名称时,将从ajax查询中调用它。

关于一些吸引人的想法的更新:Redis是一个很好的开始。它已在所有主要提供商(如AWS,Heroku,Azure等)中广泛采用和实施。设置简单,在本地轻松设置。具有集中的共享缓存,使您可以在Web / api实例之间共享数据,查询速度将大大提高,并且在缓存的数据足够时,可以减轻数据库的负担。我喜欢ioredis驱动程序。

以上是关于足以验证重复的用户名吗?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery/JavaScript:是约会吗? (验证是不是是日期)[重复]

通过视图控制器传递用户数据[重复]

Firebase 身份验证会话未过期 [重复]

是否将用户输入转换为足以清理它的整数?

最大用户数[重复]

表单验证器唯一用户名失败[重复]