koa2中使用jwt

本文详细介绍了在Koa2中如何使用JWT进行身份验证和授权,包括JWT的组成部分、创建与校验流程、使用koa-jwt中间件以及前端如何发送带有token的请求。还提供了一个相对完整的应用示例。
摘要由CSDN通过智能技术生成

随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息。随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单

JSON Web Token由三部分组成,它们之间用圆点(.)连接,header.payload.signature

header存token类型和签名算法
payload存携带的数据,比如用户信息{id:1,name:‘txj’…},其中一些是: iss(发行人)、 exp(到期时间)、 sub(主题)、 aud(受众)
signature存签名,默认使用HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

1、创建

$ npm install jsonwebtoken --save

jsonwebtoken用于创建和验证token

使用默认的HMAC SHA256生成

var jwt = require('jsonwebtoken');
var token = jwt.sign({
    foo: 'bar' }, 'secret_shhhhh');

设置过期时间(1h过期)

// 方式一
jwt.sign({
   
  exp: Math.floor(Date.now() / 1000) + (60 * 60),
  data: 'foobar'
}, 'secret');

// 方式二 推荐使用
jwt.sign({
   data: 'foobar'}, 'secret', {
    expiresIn: '1h' });
'1h’表示1小时过期
'7d’表示7天过期
数字1000表示1000毫秒过期

如果没有配置过期时间,则默认永不过期

eg:登录获取token

router.post('/token', async (ctx, next) => {
   
		
    let columnNames = ['admin_id','role_id','user_name','real_name','nick_name','portrait']
	
	let sql = `SELECT ${
     columnNames.join()} FROM admin WHERE user_name = ? AND password = ?`
	
	const md5Password = md5(password).toString()
	// 查不到数据时rows=[]
	const [rows,fields] = await mysqlPool.execute(sql, [userName,md5Password]);
	
	if(rows[0]){
   
		console.log('login success')
		// 创建token
			const token = jwt.sign
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值