当前位置: 首页 > news >正文

【node】token的生成与解析配置

在用户登录成功之后为了记录用户的登录状态通常会将用户信息编写为一个token,通过解析token判断用户是否登录。

token的生成

JSON Web Token(JWT) 是一种基于JSON的轻量级身份验证和授权机制。它是一种开放标准(RFC 7519),用于在网络应用中传递声明。
1 安装

npm i jsonwebtoken

2 引入jwt

const jwt = require(“jsonwebtoken”);

3 使用jwt,生成token

const jwt = require("jsonwebtoken");
// 获取secret秘钥
const config = require("../config.js");
const expiresIn = '1h' // token有效期// 对用户信息进行加密 生成token
const generateToken = (user) => {const token = jwt.sign({user_id: user.id,role: user.role,},config.SECRET_KEY,{ expiresIn:expiresIn });return 'Bearer ' + token;
};

4 对用户信息进行token化处理
对用户信息处理的时候,推荐将用户密码与头像信息去掉

// 登录
exports.login = (req, res) => {const userinfo = req.body;if (!userinfo.username || !userinfo.password) {return res.send({message: "用户名或者密码不能为空!",status: 0,});}const sqlStr = `select * from user where username=?`;db.query(sqlStr, [userinfo.username], (err, results) => {if (err) {res.handleResult(err.message);} else if (results.length > 0) {const password = results[0].password;const isExit = bcrypt.compareSync(userinfo.password, password);if (isExit) {// 对用户信息处理的时候,推荐将用户密码与头像信息去掉const user = { ...results[0], password: "", avatar: "" };// 生成tokenconst token = generateToken(user);res.handleResult("登录成功!", 0,token);} else {res.handleResult("密码不正确!");}} else {res.handleResult("用户不存在!");}});
};

在这里插入图片描述

解析token

1 安装

npm i express-jwt@5.3.3

2 引入expressJWT

const expressJWT = require(“express-jwt”);

3 使用expressJWT,解析token
需要注意的是token解析配置,必须在路由配置前设置

const expressJWT = require('express-jwt')
const config = require('./config')// 配置token解析
// unless中的path 除了这个地址,其他的URL都需要验证token
app.use(expressJWT({secret: config.SECRET_KEY}).unless({path: ['/api/login']  }));

在这里插入图片描述

问题描述

在使用express-jwt的过程中遇到了如下问题
在这里插入图片描述
该问题由 6.0.0 版本 更改引起。
方案一: 配置algorithms参数

在提供第三方库作为机密时,需要 algorithms 参数来防止潜在的降级攻击。

expressJwt({ secret: config.SECRET_KEY, algorithms: ['RS256'] });

方案二: 降低express-jwt的版本

npm i express-jwt@5.3.3

http://www.lryc.cn/news/610359.html

相关文章:

  • 笔试——Day28
  • 我用一个 Postgres 实现一整套后端架构!
  • LeetCode 分类刷题:16. 最接近的三数之和
  • 【Unity】协程 Async
  • 体育数据创业:用 API + 比分网,低成本快速验证
  • Mirror学习笔记
  • Linux RAID 存储技术
  • GaussDB 数据库架构师(十二) 资源规划
  • 用户与组管理命令
  • 小实验:按键点灯(中断法)
  • 【笔记】ROS1|5 ARP攻击Turtlebot3汉堡Burger并解析移动报文【旧文转载】
  • traefik网关鉴权中间件转发multipart/form-data请求的multipart: NextPart: EOF问题
  • LLM大模型时代:生活服务领域的“生存革命“与新生态重构
  • 深度学习-卷积神经网络CNN-卷积层
  • 探索机器学习在医疗领域的应用与挑战
  • Flask 项目 Windows 服务器部署全流程
  • C++信息学奥赛一本通-第一部分-基础一-第一章
  • RTX5060显卡安装cuda版本PyTorch踩坑记录
  • 深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?
  • chatgpt plus简单得,不需要求人,不需要野卡,不需要合租,不需要昂贵的价格
  • 从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
  • Oracle MCP Server简单配置以及备份调用
  • Oracle EBS ERP接口开发 — 修复bug基本流程
  • Calcite自定义扩展SQL案例详细流程篇
  • Centos Docker 安装手册(可用)
  • el-table高度自适应vue页面指令
  • Mac中M系列芯片采用rbenv管理ruby版本
  • 板子指示灯状态设计
  • 2SA2016-TD-E ON安森美 功率晶体管 0.18Ω超低压降+30MHz高频 工业电源专用
  • C语言的指针