预期“有效载荷”将是一个简单的对象:MEAN

时间:2018-10-12 14:16:51

标签: javascript node.js angular express mean-stack

这是我的路线文件(users.js)中的代码

User.findOne({linkedin_id: req.body.linkedin_id}, function(err, linkedinUser) {
    if(err) {
      console.log('err in finding linkedin user '+err);
    }
    // if user exits
    else if(linkedinUser) {
      console.log('user exist');
      const token = jwt.sign(linkedinUser, config.secret, {expiresIn: 604800});
      res.json({success: true, token: 'JWT '+token, user: {
          id: linkedinUser._id,
          linkedin_id: linkedinUser.linkedin_id,
          name: linkedinUser.name,
          username: linkedinUser.username,
          email: linkedinUser.email,
          lkprofilePic: linkedinUser.profilePic
        }, msg: 'user exits'
      });
    }
    // if user doesn't exist
    else {
      User.create({
        linkedin_id: req.body.linkedin_id,
        name: req.body.name,
        username: req.body.username,
        email: req.body.email,
        lkprofilePic: req.body.lkprofilePic
      }, function(err, result) {
        if(err) {
          res.json({success: false, msg: 'failed to add'})
          console.log('error in adding the data '+err);
        }
        else if(result) {
          const token = jwt.sign(linkedinUser,config.secret,{ expiresIn: 604800 });
          res.json({success: true, token: 'JWT '+token, user: {
            id: result._id,
            linkedin_id: result.linkedin_id,
            name: result.name,
            username: result.username,
            email: result.email,
            lkprofilePic: result.profilePic
          }, msg: 'User added '  });
        }
      });
    }
  });

来自config -> secret

module.exports = {
    secret: 'bigfish'
  }

这是我在nodejs控制台中遇到的错误

  

接收linkedin数据   D:\ product \ project-1 \ node_modules \ mongodb \ lib \ utils.js:132         犯错         ^

     

错误:预期“有效载荷”是一个普通对象。       在验证时(D:\ product \ project-1 \ node_modules \ jsonwebtoken \ sign.js:34:11)       在validatePayload(D:\ product \ project-1 \ node_modules \ jsonwebtoken \ sign.js:56:10)       在Object.module.exports [作为符号](D:\ product \ project-1 \ node_modules \ jsonwebtoken \ sign.js:108:7)       在D:\ product \ project-1 \ routes \ users.js:415:29       在功能。 (D:\ product \ project-1 \ node_modules \ mongoose \ lib \ model.js:4177:16)       并行(D:\ product \ project-1 \ node_modules \ mongoose \ lib \ model.js:2230:12)       在D:\ product \ project-1 \ node_modules \ mongoose \ node_modules \ async \ internal \ parallel.js:35:9       在D:\ product \ project-1 \ node_modules \ mongoose \ node_modules \ async \ internal \ once.js:12:16       在iteratorCallback(D:\ product \ project-1 \ node_modules \ mongoose \ node_modules \ async \ eachOf.js:52:13)       在D:\ product \ project-1 \ node_modules \ mongoose \ node_modules \ async \ internal \ onlyOnce.js:12:16       在D:\ product \ project-1 \ node_modules \ mongoose \ node_modules \ async \ internal \ parallel.js:32:13       适用时(D:\ product \ project-1 \ node_modules \ lodash_apply.js:15:25)       在D:\ product \ project-1 \ node_modules \ lodash_overRest.js:32:12       在callbackWrapper(D:\ product \ project-1 \ node_modules \ mongoose \ lib \ model.js:2199:11)       在D:\ product \ project-1 \ node_modules \ mongoose \ lib \ model.js:4177:16       $ __ save.error(D:\ product \ project-1 \ node_modules \ mongoose \ lib \ model.js:359:7)

但是数据正在保存在数据库中,并且不会返回

res.json({success: true, token: 'JWT '+token, user: {
            id: result._id,
            linkedin_id: result.linkedin_id,
            name: result.name,
            username: result.username,
            email: result.email,
            lkprofilePic: result.profilePic
          }, msg: 'User added '  });

2 个答案:

答案 0 :(得分:3)

问题出在您的令牌签名方式上

您使用的用户是猫鼬的返回用户,因此您需要使用 YOUR_USER.toJSON 。如果用户不是猫鼬用户,请改用 JSON.stringify(YOUR_USER)

将您的代码更改为

const token = jwt.sign({linkedinUser}, config.secret, {expiresIn: 604800});
//if you want to set expiration on the token
  

OR

const token = jwt.sign(linkedinUser.toJSON(), config.secret);
//if you just want to sign the token without setting the expiration

答案 1 :(得分:0)

const token=jsonwebtoken.sign(user.toJSON(),config.secret,{expiresIn:30});

在您的对象中添加.toJSON()即可,