expressjwt的getToken如何使用 您所在的位置:网站首页 kitten编程官网 expressjwt的getToken如何使用

expressjwt的getToken如何使用

2023-03-26 16:19| 来源: 网络整理| 查看: 265

expressjwt() 是一个 Express 中间件,用于验证 JWT(JSON Web Tokens)。它会检查请求头中是否存在 Authorization 字段,并且该字段的值是否是符合 JWT 规范的格式。如果 JWT 有效并且签名正确,则它会将 JWT 解码后的负载对象作为 req.auth 对象注入到请求中,并将处理转移给下一个中间件。

在使用 expressjwt() 中间件时,可以传递一些选项来指定 JWT 的配置。其中一个选项是 getToken 函数,它用于从请求中提取 JWT。默认情况下,expressjwt() 将从请求头的 Authorization 字段中提取 JWT,其格式为 Bearer 。但是,您可以通过传递自定义的 getToken 函数来覆盖默认行为。

以下是一个示例,展示如何使用自定义的 getToken 函数:

const expressJwt = require('express-jwt'); const getToken = (req) => { if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Custom') { return req.headers.authorization.split(' ')[1]; } else if (req.query && req.query.token) { return req.query.token; } return null; } app.use(expressJwt({ secret: 'mysecret', algorithms: ['HS256'], getToken: getToken }));

在上面的示例中,getToken 函数首先检查请求头中是否存在以 Custom 开头的 Authorization 字段,如果存在则返回该字段中的 token 值。否则,它检查查询参数中是否存在名为 token 的参数,并返回该参数的值。如果都不存在,则返回 null。

最后,expressjwt() 中间件使用传递的 secret 和 algorithms 来验证 JWT,使用 getToken 函数从请求中提取 JWT。

当您在使用 expressjwt() 中间件时,如果 JWT 验证成功,expressjwt() 会将解码后的负载对象存储在 req.auth 中,并且可以通过该对象访问 JWT 中的字段。请注意,这与 passport-jwt 策略中使用的 req.user 不同。

以下是一个示例,展示如何使用 req.auth 对象:

const expressJwt = require('express-jwt'); app.use(expressJwt({ secret: 'mysecret', algorithms: ['HS256'], })); app.get('/protected', (req, res) => { console.log(req.auth); // 在控制台输出解码后的负载对象 // 执行受保护的操作 });

在上面的示例中,我们定义了一个路由处理程序,对 /protected 路径进行处理。如果请求中包含有效的 JWT,则 req.auth 将包含解码后的负载对象,我们可以在控制台中查看该对象。否则, req.auth 将为 undefined。

请注意,如果您希望将解码后的负载对象存储在 req.user 中,您可以通过自定义 getToken 函数的方式来实现。以下是一个示例:

const expressJwt = require('express-jwt'); const getToken = (req) => { if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { return req.headers.authorization.split(' ')[1]; } else if (req.query && req.query.token) { return req.query.token; } return null; } app.use(expressJwt({ secret: 'mysecret', algorithms: ['HS256'], getToken: getToken, })); app.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { return res.status(401).json({ message: 'Invalid token' }); } }); app.get('/protected', (req, res) => { console.log(req.user); // 在控制台输出解码后的负载对象 // 执行受保护的操作 });

在上面的示例中,我们定义了一个自定义的 getToken 函数,它从请求头的 Authorization 字段中提取 JWT,并将其存储在 req.user 中。在路由处理程序中,我们可以访问 req.user 对象来获取解码后的负载对象。需要注意的是,为了处理 JWT 验证错误,我们还添加了一个错误处理中间件。

箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有