【发布时间】:2015-04-03 23:02:06
【问题描述】:
我正在使用 waterlock forsails.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 的用户,没有附加身份验证。为什么会这样?我正在使用节点 v0.12.1、sails 0.11 和 waterlock 0.14。我使用的适配器是带有 {migrate : "alter"} 的内置sails-disk。另一个奇怪的事情是:当我重新启动sails 时,它会询问我是否应该删除用户表中的重复项。为什么它会识别它们,但在我创建用户时却没有? 感谢您的帮助, 亚历山大
【问题讨论】:
-
我认为默认情况下它们是独一无二的? Sails gitter 可能是个讨论这个问题的好地方:gitter.im/balderdashy/sails.
-
是的,primaryKeys 应该是唯一的,我只是添加了“唯一:true”来检查是否有任何改变...
标签: node.js sails.js waterline waterlock