【问题标题】:How to extract information from a JWT in node js without any module?如何在没有任何模块的情况下从节点 js 中的 JWT 中提取信息?
【发布时间】:2020-09-28 04:14:19
【问题描述】:

你好,能帮帮我吗?

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

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

在我的表关系中,用户与帖子具有一对多关系,而帖子与每个属性都有一个用户的关系

我认为避免这种情况的最佳方法是以某种方式提取 Headers 令牌并将其与保存每个帖子的用户 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*/
    })
}

【问题讨论】:

    标签: node.js jwt koa strapi koa2


    【解决方案1】:

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

    试试这样:

    首先安装 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);
    

    【讨论】:

      【解决方案2】:

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

      1. 在访问删除功能之前创建一个中间件。
      2. 在该中间件中创建一个函数来检查帖子 ID 是否属于请求用户。
      3. 如果是,则允许他们访问下一个函数或返回“错误请求”。

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多