tfse-app-api-v0.2/common/auth.py

72 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import functools
import time
from flask import request
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, BadSignature, SignatureExpired
from common.rsa import decrypt_data
SECRET_KEY = '0FTuOi^#Afx1@2@F'
TOKEN_EXPIRATION = 14400
def create_token(param):
"""
创建token
Parameters:
param: 传入参数用于创建token
Returns:
token: 用户访问令牌
"""
s = Serializer(SECRET_KEY, expires_in=TOKEN_EXPIRATION)
token = '' + s.dumps(param).decode('ascii')
return token
def verify_token(func):
"""
校验token
"""
@functools.wraps(func)
def internal(*args, **kwargs):
# 检查token
try:
token = request.headers.get('token')
s = Serializer(SECRET_KEY)
cid = s.loads(token)['cid']
except TypeError:
return {"info": "参数错误"}, 401
except KeyError:
return {"info": "参数错误"}, 401
except BadSignature:
return {"info": "token错误"}, 401
except SignatureExpired:
return {"info": "token过期"}, 401
# 通过以上检查 返回原函数
return func(*args, **kwargs, cid=cid)
# 返回包装函数结果
return internal
def check_block(func):
"""
检查滑块是否通过
注: 前端发送的滑块校验码是rsa加密的时间戳若时间戳间隔小于3秒则校验通过
"""
@functools.wraps(func)
def internal(*args, **kwargs):
try:
verify_code = decrypt_data(encrypt_msg=request.headers.get('block'))
if (time.time() - float(verify_code)/1000) > 3:
return {"info": "滑块校验失败"}, 400
except TypeError:
return {"info": "缺少滑块验证"}, 400
except ValueError:
return {"info": "滑块验证异常"}, 400
return func(*args, **kwargs)
return internal