Flask之 flask_httpauth(HTTPTokenAuth)

写一个简单的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="")

你可能感兴趣的:(flask,python,vue.js)