首页 > 解决方案 > 如何从 JWT 标头中获取值到 nodejs 中的变量中?

问题描述

我正在制作一个 API 服务器,我可以在其中登录并查看一些信息。每当我登录时,我都会得到一个包含我的用户名的 JWT 令牌。每当我想使用它时,我想将此用户名存储在一个变量中。这是我想进入某些网页时用来验证我的令牌的代码。

import jwt from "jsonwebtoken";

function authenticateToken(req, res, next) {
  const authHeader = req.header("access-token");
  
  if (!authHeader) return res.sendStatus(401);

  jwt.verify(authHeader, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

export default authenticateToken;

它检查标头是否包含 JWT 令牌。如果是这样,它会验证它。然后在底部检索用户,但我不知道如何获取此值。

在我的路线上,我这样保护它们:

router.get("/", authenticateToken, getData);

在 getData 方法中即时显示来自 mysql 数据库的数据。我想添加一个检查以查看我的用户名是否等于 getData 中的数据(因为您只能看到某些数据)。

在 getData 我得到这样的数据:

connection.query(
  "SELECT * FROM data WHERE userid = ?", [user.username],
  (err, rows) =>

在 [user.username] 点上,我想检索 JWT 令牌中的用户名。我想使用一种方法来做到这一点,但我似乎无法得到它。如何获取我的用户名?

标签: javascriptmysqlnode.jsfunctionjwt

解决方案


您可以尝试稍微更改代码以将 传递requestgetData函数,因为您将经过身份验证的用户存储在request.

尝试这样的事情:

router.get("/", authenticateToken, async (req, res) => {
    getData(req);
});

推荐阅读