python-使用itsdangerous生成临时身份令牌

1.作用:

可以利用itsdangerous模块支持JSON WEB签名。

2.安装

如项目使用到虚拟环境,终端先【workon 虚拟环境名称
】再安装

pip install itsdangerous
3.使用itsdangerous模块
  • (1)使用TimedJSONWebSignatureSerializer生成带有有效期的token—加密
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSSerializer
from itsdangerous import BadData

secret_key= 'afesjyrtrw6457t'
expires_in = 300   # 有效期单位为秒

def generate_token()
	"""
	# 生成token
	"""
	# serializer = TJWSSerializer(秘钥, 有效期单位为秒)
	serializer = TJWSSerializer(SECRET_KEY, expires_in )
	
	# serializer.dumps(数据), 返回bytes类型,比如对用户的id和email进行加密返回前端
	data = {
		'id': user.id,
		'email':user.email
		}
	token = serializer.dumps(data)   # data为要加密的数据
	token = token.decode()   # 得到返回后的带有效期和用户信息的加密token
	
	return token
##############################################################################
  • (2)使用TimedJSONWebSignatureSerializer校验带有有效期的token,下列User是django ORM数据库中的用户模型类,其他框架用法类似均为根据数据查询指定用户是否存在----解密
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSSerializer
from itsdangerous import BadData

# 检验token(secret和有效期(expires_in)需要与生成时一致)
def check_token(token):
	# 验证失败,会抛出itsdangerous.BadData异常
	serializer = TJWSSerializer(secret_key, expires_in )
	try:
		# 获取解密后的数据 bytes:dict
	    data = serializer.loads(token)
	except BadData:
	    return None
	else:
		user_id = data.get('id')
		user_email = data.get('email')
		try:
			user = User.objects.get(id=user_id,email=user_email)
		except User.DoesNotExist:
			return None
		else:
			return user
4.使用场景:

例如:注册一个网站用户,当用户绑定邮箱保存之后,服务器会给邮箱发送一封验证邮件,用户打开邮件里的url链接,就可以向服务器发送验证请求。服务器验证用户成功则将用户表的邮箱验证标志改为True,完成邮箱验证。

  • 第一步:用户点击保存邮箱以后,或者点击验证按钮,服务器收到请求,将用户的登陆的信息组织数据,加密到token,并把token拼接到邮箱验证的ur链接里,并调用异步发送邮件任务向用户填写的邮箱发送邮件。

  • 第二步:用户打开邮件,点击验证的链接,即向服务器发送验证请求,服务器从url里取出查询参数token,并经过itsdangerous模块进行反解析获取到用户身份并进行验证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值