Я использую waterlock для sails.js для управления пользователями. Я хочу, чтобы иметь уникальное имя, так я это в моем user.js:Sails.js Waterlock - уникальное имя пользователя
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});
}
});
}
});
Очевидно, что я хочу, чтобы создание пользователя терпило неудачу, когда один с тем же идентификатором уже существует. Однако создание пользователя работает и создание auth не удается из-за уникального ограничения на имя пользователя. Но как только это не удается, у меня уже есть два пользователя с одинаковым идентификатором в моей базе данных, без привязки к нему. Почему это происходит? Я использую узел v0.12.1, паруса 0.11 и waterlock 0.14. Адаптером, который я использую, является встроенный парус-диск с {migrate: "alter"}. Еще одна странная вещь: когда я перезапускаю паруса, он спрашивает меня, следует ли удалять дубликаты в пользовательской таблице. Почему он распознает их тогда, но не тогда, когда я создаю пользователя? Благодарим за помощь, Alexander
Я думал, что они были уникальными по умолчанию? Парусный gitter может быть хорошим местом, чтобы поболтать об этом: https://gitter.im/balderdashy/sails. –
Да, primaryKeys должен быть уникальным, я просто добавил «unique: true», чтобы проверить, что это что-то меняет ... – AlexanderF