首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sails.js水锁-唯一用户名

Sails.js水锁-唯一用户名
EN

Stack Overflow用户
提问于 2015-04-04 07:02:07
回答 2查看 1.4K关注 0票数 2

我正在使用sails.js的水锁来管理我的用户。我想让他们有一个唯一的用户名,所以我的User.js中有这个:

代码语言:javascript
复制
module.exports = {
  autoPk : false,
  attributes: require('waterlock').models.user.attributes({
    id : {
      type : "string",
      primaryKey : true,
      unique : true
    }
  }),

  beforeCreate: require('waterlock').models.user.beforeCreate,
  beforeUpdate: require('waterlock').models.user.beforeUpdate
};

我的Auth.js看起来像这样:

代码语言:javascript
复制
module.exports = {

  attributes: require('waterlock').models.auth.attributes({
    username : {
      type : "string",
      unique : true
    }
  }),

  beforeCreate: require('waterlock').models.auth.beforeCreate,
  beforeUpdate: require('waterlock').models.auth.beforeUpdate
};

我正在创建这样的用户:

代码语言:javascript
复制
auth = {
  username: params.username,
  password: params.password
};
userObj = {
  id: params.username
};

User.create(userObj)
  .exec(function (err, user) {
    if (err) {
      sails.log.error("USER: " + err);
      req.session.flash = {
        err: err
      };
      return res.json(err);//res.redirect('/user/create');
    } else {
      req.session.user = user;
      waterlock.engine.attachAuthToUser(auth, user, function (err) {
        if (err) {
          sails.log.error("AUTH: " + err);
          return res.json(err);
        } else {
          req.session.authenticated = true;
          return res.json({ok: true});
        }
      });
    }
  });

显然,当具有相同id的用户已经存在时,我希望创建用户失败。但是,由于对用户名的唯一约束,用户的创建可以正常工作,身份验证的创建也会失败。但是一旦失败,我的数据库中已经有两个具有相同ID的用户,并且没有附加身份验证。为什么会发生这种情况?我使用的是node v0.12.1,sails 0.11和waterlock 0.14。我使用的适配器是内置的sails-disk和{migrate:"alter"}。另一件奇怪的事情是:当我重新启动sails时,它会询问我是否应该删除用户表中的重复项。为什么在我创建用户时它能识别它们,而不能识别它们?谢谢你的帮助,亚历山大

EN

回答 2

Stack Overflow用户

发布于 2015-04-07 05:09:58

也许你必须添加属性migrate:'drop‘到每个模型,以重新加载两个模型。测试一次,然后删除该属性。

票数 1
EN

Stack Overflow用户

发布于 2015-08-09 19:29:40

为此,您需要指定它:

代码语言:javascript
复制
module.exports = {
  attributes: {
    username: {
        type: 'string',
        unique: true,
        required: true
    }
  }
};

您还可以使用自定义类型:

代码语言:javascript
复制
module.exports = {
  types: {
    size: function() {
        true
    }
  },
  attributes: {
    username: {
        type: 'string',
        unique: true,
        minLength: 4,
        macLength: 10,
        size: 10,
        required: true
    }
  }
};

以及错误时的响应:

代码语言:javascript
复制
{
  "error": "E_VALIDATION",
  "status": 400,
  "summary": "2 attributes are invalid",
  "model": "User",
  "invalidAttributes": {
    "username": [
      {
        "rule": "string",
        "message": "`undefined` should be a string (instead of \"null\", which is a object)"
      },
      {
        "rule": "minLength",
        "message": "\"minLength\" validation rule failed for input: null"
      },
      {
        "rule": "required",
        "message": "\"required\" validation rule failed for input: null"
      }
    ],
    "password": [
      {
        "rule": "minLength",
        "message": "\"minLength\" validation rule failed for input: '123'"
      }
    ]
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29440833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档