1. 为什么要强制登录!
在一个项目中,有很多信息都是根据用户在项目中操作得来的,比如:添加到购物车的商品,生成的订单,收藏的商品,发表的文章等等,都是用户的信息,每个用户和用户都是不一样的。所以强制登录可以更好的区别用户用户之间的信息不同
2. 强制登录的思路
在每次请求之前都要检测用户是否登录,如果没有登录就重新登录。已经登录了就根据token得出用户的信息
3. 强制登录的实现
在app.py文件下写一个请求前的都会执行的全局钩子函数来获取token判断token是否存在或过期,同时通过g对象来获取用户的id信息
@app.before_request
def gz():
print("我是钩子函数")
req = reqparse.RequestParser()
req.add_argument("token",locations="headers")
args = req.parse_args()
if not args["token"]:
uid = 0
else:
payload = JwtTool().valid_jwt(args["token"])
if not payload:
uid = 0
else:
uid = payload["uid"]
g.uid = u
封装一个检验是否登录的装饰器
from flask import jsonify, g
def login(func):
def warpper(*args,**kwargs):
# 判断用户必须登录,如果没有登录,
if g.uid == 0:
return jsonify({
"code": 403,
"msg": "用户未登录"
})
return func(*args,**kwargs)
return warpper()
在获取用户信息的时候使用该装饰器,获取用户的信息
class InfoView(Resource):
@login
def get(self):
uid = g.uid
user_info = UserModel.query.get(uid)
if not user_info:
return jsonify({
"code": 403,
"msg": "用户未登录"
})
return jsonify({
"code": 200,
"msg": "用户信息获取成功",
"data": {
"username": user_info.username,
"img": user_info.img
}
})