在这种情况下,我创建了一个依赖于用户文档的jwt令牌,但问题是出于安全考虑,我不想在user
对象中包含密码字段被传递到我的encode
函数。
router.post('/admin/login', (req, res, next)=>{
passport.authenticate('local-login', (err, user, info)=> {
if (err) {
return next(err);
}else if (!user) {
return res.json(info)
}else {
user.toObject();
delete user.password;
console.log(`User is ${user}`);
let token = encode(user, 'inav');
return res.send(token)
}
})(req, res, next);
})
我试过这个,但这不起作用。 user
仍包含密码
答案 0 :(得分:1)
如果https://github.com/jaredhanson/passport-local是您正在使用的护照策略,它将返回一个猫鼬模型。您必须将其转换为普通对象才能删除密码属性。 toObject返回一个必须存储在变量中的对象。
const userObj = user.toObject();
delete userObj.password;
console.log(`User is ${userObj}`);
const token = encode(userObj, 'inav');
http://mongoosejs.com/docs/api.html#document_Document-toObject