简体   繁体   English

如何通过传递 JWT 令牌来查找论坛或节点?

[英]How to find a Forum or a Node by passing a JWT Token?

I would like to know how I can find my forum using my JWT token我想知道如何使用我的 JWT 令牌找到我的论坛

exports.getByOwnerID = function (req, res, next) {
  Forum.find({createdBy: req.body.createdBy})
  .then(doc => {
      if(!doc) { return res.status(400).end();}
      return res.status(200).json(doc);
  })
  .catch(err => next(err));
}

So here I have my function to verify my JWT Token I use it for example this way所以在这里我有我的功能来验证我的 JWT 令牌我以这种方式使用它

this is my route : router.post('/',verifyToken,getOwner);这是我的路线: router.post('/',verifyToken,getOwner);

this is my request : POST http://localhost:8080/forum/getOwner Authorization: Bearer {token}这是我的请求:POST http://localhost:8080/forum/getOwner Authorization: Bearer {token}

const extractToken = (rawTokenHeader) => {
  
  if(!rawTokenHeader) { return undefined; }

  // Remove bearer and extract token value
  const temp = rawTokenHeader.split(' ');
  if(!temp || temp.length != 2) { return undefined; }

  // Return encoded token
  return temp[1];

};

module.exports = function(req,res,next){
  // Get authorization header
  const rawTokenHeader = req.header('Authorization');

  // Get token value
  const token = extractToken(rawTokenHeader);

  // No token -> No access
  if(!token) {
    console.log('No token in request');
    // Access denied
    return res.status(401).send('Access Denied');
  }
  
  // Verify token
  try {
    const decoded = jwt.verify(token, process.env.JWT_KEY);

    req.token= decoded;
    req.user = decoded;
    //console.log(token.userID);
        // Proceed
    next();
  } catch(err) {
    console.error('Error in JWT check: ', err);
    // Tell client something went wrong
    res.status(400).send('Invalid Token');
  }
}
const forumSchema = ({
    forumName: {
        type: String,
        required: true,
    },
    forumDescription: {
        type: String,
        required: true,
    },
    createdBy: { 
        type: Schema.Types.ObjectId, ref: 'User' 
    },
    published_on: {
        type: String,
        default: moment().format("LLL")
    },
});

I´ve tried a lot of things but I can´t solve it anymore.. I need help我已经尝试了很多东西,但我无法解决它了..我需要帮助

How I don't have enough reputation to make a comment I leave this as an answer, is hard to say why this is not working if we don't know how the schema of Forum looks like and what is returning req.body.createdBy, but if the jwt is created by you could encode the Forum._id in it and when you receive it here you can decode it and find the forum in the database我怎么没有足够的声誉来发表评论我留下这个作为答案,如果我们不知道论坛的架构是什么样子以及返回 req.body.createdBy 的内容,很难说为什么这不起作用,但如果 jwt 是由您创建的,您可以在其中对 Forum._id 进行编码,当您在此处收到它时,您可以对其进行解码并在数据库中找到该论坛

edit---编辑 - -

Now that I can see the error you got and the Schema of Forum i can say that probably you can solve the error by importing mongoose and adding this at the query mongoose.Types.ObjectId(req.body.CreatedBy) that will parse the string to an objectId现在我可以看到你得到的错误和论坛的模式我可以说你可以通过导入mongoose.Types.ObjectId(req.body.CreatedBy)在将解析字符串的查询mongoose.Types.ObjectId(req.body.CreatedBy)中添加它来解决错误到一个对象 ID

As you can see, you have user (or token ) data in the req object, and I hope your jwt token also includes the user's id.如您所见,您在req对象中有user (或token )数据,我希望您的 jwt 令牌也包含用户的 id。 You can use the user id to find their Forums.您可以使用用户 ID 查找他们的论坛。

According to the router router.post('/', verifyToken, getOwner);根据路由器router.post('/', verifyToken, getOwner); ( getByOwnerID ???), let's update getOwner handler: ( getByOwnerID ???),让我们更新getOwner处理程序:

exports.getOwner = function (req, res, next) {
  Forum.find({ createdBy: req.user.userID }) // or something like that
  .then(doc => {
      if(!doc) { return res.status(400).end();}
      return res.status(200).json(doc);
  })
  .catch(err => next(err));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM