使用Express和Postman集成在Node.js WebAPI中实现JWT令牌认证

u3r8eeie  于 2023-06-22  发布在  Postman
关注(0)|答案(1)|浏览(159)

我正在使用NodeJs和Express技术构建我的WebAPI,WebAPI包含JWT Token库,并构建了一个名为“authRequired”的函数,该函数旨在检查令牌是否有效,下面是该函数的代码。

export const authRequired = (req, res, next) => {
    // Get the auth header from the request
    const authHeader = req.headers["authorization"];

    // Get the Token value from the header, normaly its in a format like : Bearer <token> 
    const token = authHeader && authHeader.split(" ")[1];

    // If the token is null, it will return a 401 satus and a message
    if (token == null) return res.status(401).json({ message: "Unauthorized" });

    // Verify if the token is valid and if it is, it will return the user
    jwt.verify(token, process.env.TOKEN_SECRET, (err, user) => {
        // Logging the error to the console
        if (err) return res.status(403).json({ message: "Forbidden" }); 
        const now = Math.floor(Date.now() / 1000); // This will return the current time in seconds

        // If the token has expired, it will return a 401 status and a message
        if (user.exp <= now) return res.status(401).json({ message: "Token has expired" });  // Token gonna be expired in 1 hour
        // return console.log with time to expire token, return second after seccond console.log with time to expire token
         console.log("######################################################-Token expires in " + (user.exp - now) + " seconds");

        // If there is an error, it will return a 403 status and a message
        req.user = user;
        // Calling the next middleware in the chain (if there is one)
        next();
    });
};

我也有一个.env文件,其中除了定义主机和服务器端口之外,我还定义了TOKEN_SECRET。

TOKEN_SECRET = 123

为了测试我的API,我使用Postman,我想要的是在Postman中定义TOKEN_SECRET的值,以便能够测试所有端点,此时我必须做的是总是生成一个新的令牌,以便能够执行我想要的测试,通过这个TOKEN_SECRET,它总是可以测试端点。

nuypyhwy

nuypyhwy1#

Postman 有pre-requests scriptsTest机制,所以你写一些脚本来执行你的目标。对我来说,我通常写一个请求来获取令牌,并将值写入环境。我把脚本放在请求Test选项卡中

pm.environment.set("accessToken", pm.response.json().data);

然后我把add header脚本放在集合pre-requests scripts中,用token执行add header,例如

var Header = require('postman-collection').Header
pm.request.headers.add(new Header("Authorization: "+ pm.environment.get('accessToken')))

所以我只能在令牌过期时才能再次获取。如果你的token即将到期,你可以在集合pre-requests scripts中写入send请求来更新token。集合pre-requests scripts乘坐侧具有相关片段

相关问题