JWT使用mongoose数据进行不正确的解码

时间:2017-01-19 14:09:24

标签: node.js json-web-token

这是我正在编码的数据

{ '$__': 
   { strictMode: true,
     getters: {},
     wasPopulated: false,
     activePaths: { paths: [Object], states: [Object], stateNames: [Object] },
     emitter: { domain: null, _events: {}, _eventsCount: 0, _maxListeners: 0 } },
  isNew: false,
  _doc: 
   { __v: 0,
     verified: false,
     password: '$2a$10$1TGM/Nnoii/ERt5YZFqaROJA0176bXw5wn7fF9B7.DrikVcW/Va4e',
     _id: '5880c2562f109c2e17489155' },
  _pres: 
   { '$__original_save': [ null, null ],
     '$__original_validate': [ null ],
     '$__original_remove': [ null ] },
  _posts: 
   { '$__original_save': [],
     '$__original_validate': [],
     '$__original_remove': [] },
  iat: 1484834592 }

以及使用jsonwebtoken解码后得到的数据。

password

如果您注意到文档我应该能够使用decoded.password访问已解码的decoded._doc.password字段,但在这种情况下,我必须使用jwt。这是以某种方式发生的,因为我直接将mongoose对象传入_doc或输出正常,我应该通过添加module.exports['generateToken'] = (data)=>{ return new Promise((fullfill,reject)=>{ console.log(data.user); var token = jwt.sign(data.user,'shhhhhh'); fullfill(token); }); } module.exports['decodeToken'] = (token)=>{ return new Promise((fullfill,reject)=>{ jwt.verify(token,'shhhhhh',(err,decoded)=>{ if(err) reject(err); console.log(decoded); fullfill(token); }); }); } 来访问数据。相关代码是

data.user

findOne是我从mongoose查询 ngOnInit() : void{ this._loadCoil.getAllCoils().subscribe(coils =>{ this.coils = coils; this.gridData = { data: this.coils.slice(this.currentPage, this.currentPage + this.displaySize), total: this.coils.length}; for(let i = 0; i < this.coils.length; i++){ let isFound = false; for (let j = 0; j < this.dropDownArray.length; j++){ if (this.dropDownArray[j] == this.coils[i].unit){ isFound = true; break; } } if(!isFound){ this.dropDownArray.push(this.coils[i].unit); } } }); } 获得的文档。

1 个答案:

答案 0 :(得分:1)

  

这是以某种方式发生的,因为我直接将猫鼬对象传入jwt

是的,猫鼬模型的实例内部结构相当复杂。 _doc是对内部文档的引用。

为了避免._doc访问,您应该将转换为普通对象的文档编码:

module.exports['generateToken'] = (data)=>{
  return new Promise((fullfill,reject)=>{
    console.log(data.user);
    var token = jwt.sign(data.user.toObject(),'shhhhhh');
    fullfill(token);
  });
}