首页新闻动态正文

python-使用itsdangerous生成临时身份令牌【黑马python培训】

更新时间: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
和我们在线交谈!