2017-01-16 95 views
0

我已經創建了一個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 
}); 

回答

0

我發現的錯誤,我忘記輸入全名作爲一個參數」。選擇() '的方法,同時使用' .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"}); 
        } 
       } 
       } 

      });