2017-04-22 84 views
0

这里是情况,我创建了一个取决于用户文档的jwt令牌,但问题是出于安全性原因,我不想在传递到我的encode函数中的user对象中包含密码字段。从返回的猫​​鼬文档实例中删除一个属性。 MongoDB

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仍然包含密码

回答

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

+0

有趣的是前,我曾尝试这样做,也没有工作。谢谢您的回答。 –