我正在使用node.js
构建小型游戏并存储状态/令牌,而我正在使用在线数据库mongolab
。我使用以下功能生成令牌:
UserSchema.methods.generateAuthToken = function() {
var user = this;
var access = "auth";
var token = jwt.sign({_id: user._id.toHexString, access}, "abc123").toString();
user.tokens = user.tokens.concat({access, token});
return user.save().then(() => {
return token;
});
};
save
函数是:
UserSchema.pre("save", function(next) {
var user = this;
console.log("Being saved");
if (user.isModified("password")) {
console.log("Being modified");
bcrypt.genSalt(5, (err, saltvalue) => {
bcrypt.hash(user.password, saltvalue, (err, hash) => {
user.password = hash;
next();
});
});
} else {
next();
}
});
如果我停留在sometime(delay)
的某个页面上,那么数据库会将令牌重置为空数组。
但是,我在各处插入了console.logs
,以查看服务器是否尝试重置该值,但是数据库会自动重置该值。
如果有人知道这种错误,那将对您有很大帮助。