如何从 JWT 标头中获取值到 nodejs 中的变量中?

Posted

技术标签:

【中文标题】如何从 JWT 标头中获取值到 nodejs 中的变量中?【英文标题】:How can I get a value from the JWT header into a variable in nodejs? 【发布时间】:2021-08-07 22:13:27 【问题描述】:

我正在创建一个 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 令牌中的用户名。我想使用一种方法来做到这一点,但我似乎无法得到它。如何获取我的用户名?

【问题讨论】:

【参考方案1】:

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

试试这样的:

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

【讨论】:

以上是关于如何从 JWT 标头中获取值到 nodejs 中的变量中?的主要内容,如果未能解决你的问题,请参考以下文章

未从响应标头中的后端获取 JWT 令牌

从打字稿中的 Set-Cookie 标头中获取 jwt 值

使用 Rails 和 React 时如何在标头中获取 JWT 令牌

如何从标头中正确获取 jwt 令牌并将其与 express 一起使用

如何在 Angular 中从服务器获取带有 jwt 令牌的响应标头

如何从标头中的cookie中获取特定元素