2019-06-17【加密模块: itsdangerous】

写在前面

在做项目的时候,用户注册需要发一个验证连接给用户,验证连接需要携带用户信息,避免直接在URL中明文显示用户名或者用户id,防止某些用户恶意攻击,使用itsdangerous对用户名或者id加密

itsdangerous使用

  • 安装 itsdangerous
pip install itsdangerous
  • 加密信息
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

serializer = Serializer('secret', 3600)#初始化一个Serializer对象,secret默认为加密的类型,可以自己设定,3600为过期时间,单位为s
info = {'confirm': 1}
token = serializer.dumps(info) #加密的时候,使用serializer_obj.dumps()方法,默认为bytes数据类型
token = token.decode() #将bytes数据类型转换为 utf-8,使用decode即可

print(token)


# eyJhbGciOiJIUzUxMiIsImlhdCI6MTU2MDc3MjYxNCwiZXhwIjoxNTYwNzc2MjE0fQ.eyJjb25maXJtIjoxfQ.8A_GU0nxqQuLMVmE6l5mAzno-LjsNWTMNAYm4i_WdTbg5bRtZwLk7vc6LpKRMkcfRYnK7vUo-DB7k_4daiVuXw

  • 解密信息
serializer = Serializer('secret', 3600)
token = serializer.loads(token)
print(token)


# {'confirm': 1}
  • 过期时间
    如果在时间过期后,再解密,会报错,错误类型为SignatureExpired,如下图:
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
import time

# 加密
serializer = Serializer('secret',5)
info = {'confirm': 1}
token = serializer.dumps(info) #加密的时候默认为bytes数据类型
token = token.decode() #将bytes数据类型转换为 utf-8,使用decode即可

# 解密
serializer = Serializer('secret',5)
time.sleep(6)
token = serializer.loads(token)


# itsdangerous.exc.SignatureExpired: Signature expired

itsdangerous 在用户注册中发送用户验证邮件的使用

1、Django中 配置文件settings.py 中有SECRET_KEY,可以直接使用
2、在解密的过程中需要捕获 SignatureExpired 的错误

  • 发邮件之前加密(部分代码展示):

serializer = Serializer(settings.SECRET_KEY, 3600)
info = {'confirm': user.id}
token = serializer.dumps(info)#bytes
token = token.decode()

  • 发邮件之后解密(部分代码展示):
serializer = Serializer(settings.SECRET_KEY, 3600)
try:
    info = serializer.loads(token)
    # 获取待激活用户的id
    user_id = info['confirm']
    # 根据id获取用户信息
    user = User.objects.get(id=user_id)
    user.is_active = 1
    user.save()

    # 跳转到登录页面
    return redirect(reverse('user:login'))
except SignatureExpired as e:
    # 激活链接已过期
    return HttpResponse('激活链接已过期')

你可能感兴趣的:(2019-06-17【加密模块: itsdangerous】)