写一个简单的FlaskAPI,Token验证
下载flask-httpauth包,itsdangerous包
后者是用来生成临时身份令牌,检验token的
pip install flask-httpauth
pip install itsdangerous
model.py文件:(在model文件中user类下添加生成token方法)
# 生成token
@staticmethod
def generate_auth_token(user_id):
s = Serializer(Config.SECRET_KEY, expires_in=Config.EXPIRES_IN)
return s.dumps({'id': user_id}).decode('ascii')
authToken.py文件:(验证token文件)
from flask import g
from flask_httpauth import HTTPTokenAuth
from itsdangerous import SignatureExpired, BadSignature, TimedJSONWebSignatureSerializer as Serializer
from App.models import User
from App.settings import Config
#生成HTTPTokenAuth对象
authToken = HTTPTokenAuth()
#@authToken.verify_token用来重写HttpTokenAuth验证token方法
@authToken.verify_token
def verify_authToken(token):
g.user = None
s = Serializer(Config.SECRET_KEY)
try:
data = s.loads(token)
except SignatureExpired:
# 正确但是过期了
return False
except BadSignature:
# 错误的token
return False
#上面没有返回错误,下面就执行你的token验证逻辑并返回
return True
到这里验证token的文件写好了.
需要注意的是,后端收到登录请求,验证密码成功后返回token给前端.
前端在请求中携带token的时候,在`Authorization`请求头设置上
添加Bearer +token的样式.否则verify_authToken(token)将获取不到token.
如下
headers['Authorization'] = 'Bearer ' + token
看插件HTTPTokenAuth源码可以看到:
默认token的scheme是: Bearer.
def __init__(self, scheme='Bearer', realm=None, header=None):
super(HTTPTokenAuth, self).__init__(scheme, realm, header)
如果想修改,直接authToken.verify_token(scheme="")