本帖最后由 客客气气123 于 2019-6-9 21:10 编辑
1.作用:
可以利用itsdangerous模块支持JSON WEB签名。
2.安装
如项目使用到虚拟环境,终端先【workon 虚拟环境名称
】再安装
pip install itsdangerous
1
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模块进行反解析获取到用户身份并进行验证。
---------------------
作者:Keepself
来源:CSDN
原文:https://blog.csdn.net/qq_38923792/article/details/91356527
版权声明:本文为博主原创文章,转载请附上博文链接! |
|