当我们在开发项目的时候,很多时候一些功能需要登录后才能实现
#思路
在登录时生成一个token,通过验证token来确定是否登录
1.生成token
def generate_jwt(payload, expire, algorithms='HS256'): key = current_app.config.get('SERCRET_KEY') if 'expire' not in payload: payload['expire'] = str(expire) try: token = jwt.encode(payload, key, algorithms) return token except Exception as e: print('generate_token err', e) return e
2.在登录时将用户信息写入token
3.验证token
from flask import request, g from util.jwt_util import check_token def check_token(token): key = current_app.config.get('SERCRET_KEY') payload = jwt.decode(token, key, algorithms='HS256') return payload def jwt_authorization(): token = request.headers.get('Authorization') if token: payload = check_token(token) print('auth payload--->', payload) if payload: # token 校验成功,把用户id写入g对象 g.user_id = payload.get('id') print('g.user_id', g.user_id)
4.通过判断g对象中是否有用户id判断是否登录
from flask import g from functools import wraps def login_required(func): """强制登录""" @wraps(func) def wrapper(*args, **kwargs): # 在视图函数之情前判断是否登录 print('uid--->', g.user_id) if g.user_id: return func(*args, **kwargs) else: # 没有登录 return {'message': '请先登录'}, 401 return wrapper