安装和启用
先通过pip来安装扩展:Flask-HTTPAuth
pip install Flask-HTTPAuth
创建对象,并设置自定义处理方法
根目录下
app\token.py
from flask import jsonify, g,current_app
from flask_httpauth import HTTPBasicAuth,HTTPTokenAuth
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from app.db import Db
import hashlib
#认证账户名和密码
auth = HTTPBasicAuth()
#认证token
token_auth = HTTPTokenAuth(scheme='Bearer')
@auth.verify_password
def verify_password(username, password):
app=current_app._get_current_object()
password = hashlib.new('md5',password.encode('utf8')).hexdigest()
admin = Db.table('bn_admin_user').where({'username':username,'password':password}).find()
if admin:
g.username = username
g.admin_id = admin['id']
return True
return False
@auth.error_handler
def unauthorized():
return jsonify({'code':'403','msg': '账户名或者密码错误'}), 403
@token_auth.verify_token
def verify_token(token):
app = current_app._get_current_object()
s = Serializer(app.config['SECRET_KEY'])
try:
data = s.loads(token)
g.username = data['username']
g.admin_id = data['admin_id']
return True
except:
return False
@token_auth.error_handler
def unauthorized():
return jsonify({'code':'403','msg': 'token认证失败'}), 403
在模型中使用蓝图设置路由并绑定验证
from flask import g,jsonify
from flask import Blueprint
from app.token import token_auth
from app.auth import ver_auth
main = Blueprint('main',__name__)
#请求路由前处理绑定
@main.before_request
#验证token装饰器
@token_auth.login_required
#权限验证
@ver_auth
@main.route('/',methods=['GET','POST'])
def index():
return '首页'
@main.route('/aa',methods=['GET','POST'])
def aa():
return '测试'