我正在使用waterlock for sails.js来管理我的用户。我希望他们有一个唯一的用户名,所以我在我的User.js中有这个:
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看起来像这样:
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
};
我正在创建这样的用户:
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的用户已经存在时,我希望创建用户失败。但是,由于用户名的唯一约束,用户的创建工作并且auth的创建失败。但是一旦失败,我的数据库中已经有两个具有相同ID的用户,没有附加身份验证。为什么会这样?我使用节点v0.12.1,风帆0.11和水锁0.14。我使用的适配器是带有{migrate:" alter"}的内置sails-disk。另一个奇怪的事情是:当我重新启动sails时,它会询问我是否应删除用户表中的重复项。为什么它会识别它们而不是我创建用户时? 谢谢您的帮助, 亚历山大
答案 0 :(得分:1)
也许您必须将属性migrate:' drop'添加到每个模型,以重新加载这两个模型。测试一次,然后删除属性。
答案 1 :(得分:0)
您需要指定它:
module.exports = {
attributes: {
username: {
type: 'string',
unique: true,
required: true
}
}
};
您也可以使用自定义类型:
module.exports = {
types: {
size: function() {
true
}
},
attributes: {
username: {
type: 'string',
unique: true,
minLength: 4,
macLength: 10,
size: 10,
required: true
}
}
};
如果错误的反应:
{
"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'"
}
]
}
}