如何在没有任何模块的情况下从节点js中的JWT中提取信息?

How to extract information from a JWT in node js without any module?

你好,能帮帮我吗?

我正在尝试创建一个函数来保护 POST 和 DELETE 方法。

我的问题是,我的应用程序的所有经过身份验证的用户都可以删除其他用户的 post,如果他们知道 post 的 ID。

在我的 table 关系中,用户与 post 和 post 之间存在一对多关系,每个 属性 都有一个用户

我认为避免这种情况的最好方法是以某种方式提取 Headers 令牌并将其与保存每个 post

的用户 ID 进行比较

我正在使用 sqlite 数据库并使用 Strapi

另一个 api 在中间件中使用这个模块,但我不太清楚如何在 satrapi 中应用它,文档有点混乱

const jwt = require('jsonwebtoken');

/*==============
verify token
================*/

let verificarToken = (req, res, next) => {

    let token = req.get('token')


    /*res.json({
        ok:true,
        token: token
    })*/

    jwt.verify(token, process.env.SEED_TOKEN, (err, decoded) => {           

        if (err) {
            return res.status(401).json({
                ok: false,
                err: "token invalido"

            });
        }


        req.usuario = decoded.usuario;
        next();
        /* el next ejecuta la siguiente peticion luego de haber pasado el middleware*/
    })
}

您可以在找到请求用户后执行以下操作(正如您在上面找到的那样)

  1. 在访问删除功能之前创建一个中间件。
  2. 在该中间件中创建一个函数来检查 post id 是否属于请求用户。
  3. 如果是,允许他们访问下一个功能或return 'bad request'。

是的,您可以从令牌中提取数据。

这样试试:

首先安装atob:npm i atob

const atob = require("atob");

var base64Url = token.split(".")[1];
var base64 = base64Url.replace("-", "+").replace("_", "/");
var tokenData = JSON.parse(atob(base64));

console.log(tokenData);