【发布时间】:2020-10-23 01:10:31
【问题描述】:
我有一个 JSON Web 令牌,一旦它被验证,它就会给我一个字符串,它是我想要查找的用户的对象 ID 值,但似乎每次我尝试查询时都会将它解析为猫鼬对象 ID永远找不到我的用户,我是否正确解析它?我总是得到一个 401 无效的 token paylaod
logRoute.get('/user', (req, res) => {
let token = req.body;
User.findOne({_id: mongoose.Types.ObjectId(jwt.verify(token.token, 'secretkey').subject)}, (error, user) => {
if (error) {
console.log(error)
} else {
if (!user) {
res.status(401).send('invalid token payload')
} else {
let userData = {firstname: user.firstname, lastname: user.lastname, type: user.type}
res.status(200).send(userData)
}
}
})
})
我的用户数据
{
"_id": {
"$oid": "5efc7d60ba7a8d3db08ca767"
},
"type": "teacher",
"firstname": "arandomfirstname",
"lastname": "arandomlastname",
"login": "random1",
"pwd": "arandompassword"
}
和
console.log(jwt.verify(req.body.token, 'P3GPROJECT'))
还给我
{ subject: '5efc7d60ba7a8d3db08ca767', iat: 1593690718 }
编辑:
用户模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
_id: String,
pwd: String,
lastname: String,
firstname: String,
type: String
});
module.exports = mongoose.model('user', userSchema, 'user');
【问题讨论】:
-
我不认为mongoose有问题,我认为你的令牌中没有id。 Mongoose 理解 id 即使它是一个字符串,因此请确保
console.log(jwt.verify(req.body.token, 'P3GPROJECT'))返回正确的对象。 -
我在控制台记录了它并且 jwt 验证返回给我正确的 id
-
请把它放在你的问题上
-
我已经回答了您的问题并以更好的方式重写了您的代码。
-
请将架构放入您的用户模型
标签: javascript mongoose mongodb-query jwt