没有得到JWT有效载荷的所有字段
问题描述:
我已经创建了一个MEAN堆栈web应用程序,它具有登录注销选项。用户登录后,我使用了jsonwebtoken npm软件包。 这里的主要问题是创建并在该令牌的有效载荷在JWT用户登录时包含用户名,电子邮件和全名,但在解码令牌我只得到用户名和电子邮件领域没有得到JWT有效载荷的所有字段
这里是jwt.sign功能 -
var token=jwt.sign({userid:user.username,email:user.email,fullname:user.fullname},secret,{expiresIn:'24h'});
这里jwt.verify方法 -
jwt.verify(token,secret,function(err,decoded){
if(err){
res.json({success:false,message:"invalid token"});
} else {
req.decoded=decoded;
next();
}
})
标记示例 -
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOiJuaXRpbi5zYWNoZGV2IiwiZW1haWwiOiJuaXRpbi5zYWNoZGV2QGVtYWlsLmNvbSIsImlhdCI6MTQ4NDU1ODAxMiwiZXhwIjoxNDg0NjQ0NDEyfQ.fWogT-aHJY4Xyc8Ebm4OXPkWD3poaWG3IAAf9VS-q58
令牌decoded-
{
"userid": "nitin.sachdev",
"email": "[email protected]",
"iat": 1484558012,
"exp": 1484644412
}
userSchema -
var UserSchema=new Schema({
fullname:String,
username:{type:String,lowercase:true,required:true,unique:true},
password:{type:String,required:true},
email:{type:String,required:true,lowercase:true,unique:true},
contactno:Number,
orgname:String
});
答
我发现的错误,我忘记输入全名作为一个参数”。选择() '的方法,同时使用' .findOne() '找到用户的方法。
以下是更正代码 -
//mistake was actually here
User.findOne({username:req.body.username}).select('email username password fullname').exec(function(err,user){
//if(err) throw err;
if(!req.body.password||!req.body.username)
{
res.json({success:false,mesage:"please enter all the fields"});
}
else
{
if(!user){
res.json({success:false,message:"couldnt find the user"});
}
else if(user)
{
if(!req.body.password)
res.json({success:false,mesage:"please enter password"});
var validPassword=user.comparePassword(req.body.password);
if(validPassword){
//jwt.sign ismethod to create JWT. 1st par is object containing data that token will contain.
console.log(user.fullname);
var token=jwt.sign({userid:user.username,email:user.email,fullname:user.orgname},secret,{expiresIn:'24h'});
res.json({success:true,message:"loggedin Successfully",token: token});
}
else
{
res.json({success:false,message:"wrong password"});
}
}
}
});