当我们在开发项目的时候,很多时候一些功能需要登录后才能实现
#思路
在登录时生成一个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