node后端生成token及验证

// 首先是引入jsonwebtoken和生成token用的key(安全起见,存放在了系统环境变量TOKEN_KEY中,这是一种方法)
const jwt = require("jsonwebtoken");
const jwtKey = process.env.TOKEN_KEY;
// const jwtKey = fs.readFileSync("/path/../public.pub") // 这种更安全,直接将密钥读取出来使用,比如可以使用openSSL生成的

......

// 用户登陆正确时,服务器生成并返回token
app.post('/login', (req,res) => {
    const {username, password} = req.body;
  // 此处理省略从数据库获取用户名及密码信息,直接进行比对
  if(username === database.username && password === database.password) {
  	// 用户登陆成功后跳转到其它页面时,无须再次输入用户名及密码等了,所以此处理服务器会生成并发送给用户一个token
  	jwt.sign(
  		{ username,... } // 除了pwd
  		jwtKey,
  		{ expiresIn: '30s' }, // 定义失效时间为30s
  		(err, token) => {
  			res.json({username, message:"登陆成功...", token})
  		}
  	)	
  }
})
......
// 此时前端拿到token后,可以将这个token存放到cookie或者authorization头部,方便再次发送请求时携带
// 此处理以放在authorization为例继续进行下一步的请求回复,以afterlogin为例

app.get('/afterlogin',(req,res)=>{
	// 既然派发了token,那么就要在用户发起请求时先进行解析这个头部的token
	const headers = req.headrs;
	const token = headers['authorization'].split(' ')[1]; // 真正的token是在Bearer 后面的部分
	jwt.verify(token, jwtKey, (err, payload)=>{ // 验证成功的话,会得到真正的负载内容payload
		if(err) res.sendStatus(403); // 解析token错误的话,即验证错误时,返回403
		// 如果解析正确的话,继续走下面的程序
		res.json({message: '认证成功!',payload}) // 此处举例,但没有必要返回这个负载内容payload
	})
	
})
posted @   k19  阅读(419)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示