1.生成token验证码方案 ,使用itsdangerous 大宝剑,python
能够序列化出验证码,并能设置过时时间django
安装 itsdangerous
url
pip install itsdangerousspa
对用户名和邮箱进行序列化生成token码,有效期3600秒,过时后这个token码不能进行解码code
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from django.conf import settings def generate_verify_email_url(user): """ 生成邮箱验证连接 :param user: 当前登陆用户 :return: verify_url """ serializer = Serializer(settings.SECRET_KEY, expires_in=3600) data = {'user_id': user.id, 'email': user.email} token = serializer.dumps(data).decode()
#settings.EMAIL_VERIFY_URL是个固定的连接地址
verify_url = settings.EMAIL_VERIFY_URL + '?token=' + token
return verify_url
2.解码blog
对上边生成的token码进行解码,过时不能解码,须要使用相同的序列化器配置token
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer,BadData from django.conf import settings def check_verify_email_token(token): """ 验证token并提取user :param token: 用户信息签名后的结果 :return: user, None """ serializer = Serializer(settings.SECRET_KEY, expires_in=3600) try: data = serializer.loads(token) except BadData: return None else: user_id = data.get('user_id') email = data.get('email') try: user = User.objects.get(id=user_id, email=email) except User.DoesNotExist: return None else: return user