我正在为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 的用户,没有附加身份验证。为什么会这样?我正在使用节点 v0.12.1、sails 0.11 和 waterlock 0.14。我使用的适配器是带有 {migrate : "alter"} 的内置sails-disk。另一个奇怪的事情是:当我重新启动sails 时,它会询问我是否应该删除用户表中的重复项。为什么它会识别它们,但在我创建用户时却没有?谢谢你的帮助,亚历山大