北京备案网站软件开发工具名词解释
news/
2025/9/22 16:58:52/
文章来源:
北京备案网站,软件开发工具名词解释,营销型网站翻译,宣传片拍摄脚本范本1. 安装 JWT 相关的包 运行下面两个命令#xff0c;安装如下两个 JWT 相关的包
npm i jsonwebtoken express-jwt jsonwebtoken 用于生成 JWT 字符串 express-jwt 用于将 JWT 字符串解析还原成 JSON 对象 2. 导入 JWT 相关的包
// 导入
const jwt require(jsonwebtoken)
con…1. 安装 JWT 相关的包 运行下面两个命令安装如下两个 JWT 相关的包
npm i jsonwebtoken express-jwt jsonwebtoken 用于生成 JWT 字符串 express-jwt 用于将 JWT 字符串解析还原成 JSON 对象 2. 导入 JWT 相关的包
// 导入
const jwt require(jsonwebtoken)
const expressJWT require(express-jwt) 3. 定义 secret 密钥 为了保证 JWT 字符串的安全性防止JWT字符串在网络传输过程中被别人破解我们需要专门定义一个用于加密和解密的 secret 密钥 ① 当生成JWT字符串时需要使用 secret 密钥对用户的信息进行加密最终得到加密好的JWT字符串 ② 当把JWT字符串解析还原成JSON对象时需要使用 secret 密钥进行解密
// 定义 secret 密钥建议将密钥命名为 secretKey
// secret 密钥的本质:就是一个字符串
const secretKey love sy ^_^4. 在登录成功后生成 JWT 字符串 调用 jsonwebtoken 包提供的 sign() 方法将用户的信息加密成jwt字符串响应给客户端
// 登录接口
app.post(/api/login, function(req, res) {const userinfo req.body// 登录失败// ......省略// 登录成功// 登录成功后,调用 jwt.sign() 方法生成 jwt字符串,并通过token发送给客户端// 参数1: 用户的信息对象// 参数2: 加密的密钥// 参数3: 配置对象,可以配置当前 token 的有效期const tokenStr jwt.sign({username: userinfo.username}, secretKey, { expiresIn: 30s})res.send({status: 200, message: 登录成功!,token: tokenStr, // 要发送给客户端的 token 字符串})
})5. 将 JWT 字符串还原成 JSON 对象 客户端每次访问有权限的接口时都需要主动通过请求头中的 Authorization 字段将 Token 字符串发送到服务器进行身份验证 服务器可以通过 express-jwt 中间件自动将客户端发送的 Token 解析还原成 JSON 对象
// 注册将 JWT 字符串还原成 JSON 对象的中间件
// expressJWT({ secret: secretKey }) 解析 Token 的中间件
// .unless({ path: [/^\/api\//] }) 用来指定哪些接口不需要访问权限
app.use(expressJWT({ secret: secretKey }).unless({ path: [/^\/api\//] })) 6. 使用 req.user 获取用户信息 当 express.jwt 这个中间件配置成功后即可在有权限的接口中使用 req.user 对象来访问从 JWT 字符串中解析出来的用户信息 最新版 是挂载到 req.auth
// 这是一个有权限的 API 接口
app.get(/admin/getinfo, (req, res) {// 使用 req.user 获取用户信息,并发送给客户端res.send({status: 200, message: 获取用户信息成功!,data: req.user, // 要发送给客户端的用户信息})
}) 7. 捕获解析 JWT 失败后产生的错误 使用 express-jwt 解析 Token 字符串时如果客户端发送过来的 Token 字符串过期或不合法会产生一个解析失败的错误影响项目的正常运行我们可以通过 Express 的错误中间件捕获这个错误并进行相关的处理
// 捕获解析 JWT 失败后产生的错误
app.use((err, req, res, next) {// 错误由 token 解析失败导致if(err.name UnauthorizedError) {return res.send({status: 401,message: 无效的token})}res.send({status: 500,message: 未知错误})
})
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909722.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!