我正在使用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的用户已经存在时,我希望创建用户失败。但是,由于对用户名的唯一约束,用户的创建可以正常工作,身份验证的创建也会失败。但是一旦失败,我的数据库中已经有两个具有相同ID的用户,并且没有附加身份验证。为什么会发生这种情况?我使用的是node v0.12.1,sails 0.11和waterlock 0.14。我使用的适配器是内置的sails-disk和{migrate:"alter"}。另一件奇怪的事情是:当我重新启动sails时,它会询问我是否应该删除用户表中的重复项。为什么在我创建用户时它能识别它们,而不能识别它们?谢谢你的帮助,亚历山大
发布于 2015-04-07 05:09:58
也许你必须添加属性migrate:'drop‘到每个模型,以重新加载两个模型。测试一次,然后删除该属性。
发布于 2015-08-09 19:29:40
为此,您需要指定它:
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'"
}
]
}
}https://stackoverflow.com/questions/29440833
复制相似问题