更新时间:2019年07月26日 11时11分56秒 来源:黑马程序员论坛
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 |