【发布时间】:2016-01-19 06:41:14
【问题描述】:
我正在 MEAN.js 上运行一些项目,但遇到以下问题。我想进行一些用户的个人资料计算并将其保存到数据库中。但是用户模型中的方法存在问题:
UserSchema.pre('save', function(next) {
if (this.password && this.password.length > 6) {
this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
this.password = this.hashPassword(this.password);
}
next();
});
如果我将在我的更改中发送密码,它将更改凭据,因此用户下次无法登录。我想在保存之前从用户对象中删除密码,但我做不到(让我们看看下面代码中的 cmets):
exports.signin = function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err || !user) {
res.status(400).send(info);
} else {
/* Some calculations and user's object changes */
req.login(user, function(err) {
if(err) {
res.status(400).send(err);
} else {
console.log(delete user.password); // returns true
console.log(user.password); // still returns password :(
//user.save();
//res.json(user);
}
});
}
})(req, res, next);
};
怎么了?为什么delete方法返回true,但是什么也没发生?谢谢你的帮助:)
【问题讨论】:
-
非严格模式删除即使属性无法删除也会返回true。同样delete在通过原型链获取属性时也会返回true,没有效果。
-
'use strict';是我的控制器文件的第一行。但是如何删除密码属性? -
这似乎不太可能,但您是否检查过
password属性是否实际上是user对象的属性并且不是来自原型链上的某个人(hasOwnProperty)?将其设置为undefined还不够(抱歉,没有平均堆栈的经验)?就 json 编码而言,结果应该没有区别。 -
不,将属性设置为 undefined 不起作用 ... hasOwnProperty 返回 false,正如您所料
标签: javascript mean-stack