node后端进行token的生成、验证

// 首先是引入jsonwebtoken和生成token用的key(安全起见,存放在了系统环境变量TOKEN_KEY中)
const jwt = require("jsonwebtoken");
const jwtKey = process.env.TOKEN_KEY;

......

// 用户登陆正确时,服务器生成并返回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
	})
	
})

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值