【发布时间】:2018-03-02 18:41:45
【问题描述】:
我正在做项目,发现奇怪的问题,jwt.sign 函数无法将传递的用户识别为对象,但是当我在 jwt.sign 中创建新对象时,它工作正常。
如果这里的文字难以理解是代码:
var username = req.body.username;
var password = req.body.password;
User.getUserByUsername(username,(err, user)=>{
if(err)
throw err;
if(!user)
return res.json({success: false, msg: "User with username "+ username+" doesn't exist"});
User.comparePassword(password, user.password, (err, passwordsMatched) =>{
// Prints that user is type of object
console.log("Type of user: "+typeof(user));
if(err) throw err;
if(passwordsMatched){
// line bellow throws error that it expects object when I pass user
var token = jwt.sign(user, Config.secret, {expiresIn: 604800});
res.json({
success: true,
token: 'JWT '+token,
user: {
name : user.name,
username: user.username
}
});
}else{
return res.json({success: false, msg: "Password doesn't match"});
}
});
});
var token = jwt.sign(user, Config.secret, {expiresIn: 604800}); 行抛出以下错误:
错误:预期对象 在验证 ...(jsonwebtoken 和 bcrypt 模块的路径 + 我调用 jwt.sign 的行)
所以我尝试修复,我发现如果我在函数调用中使用用户数据创建新对象,那么它可以工作,它看起来像这样:
var token = jwt.sign({_id : user._id,
username: user.username,
password: user.password
},
Config.secret,
{expiresIn: 604800});
所以我的问题是为什么函数不接受我的用户对象以及是否有解决方案让它接受?
【问题讨论】:
-
看来 user 是一个猫鼬对象。尝试做
user.toObject();
标签: node.js jwt passport.js