commodity_backingtrack_system/app/interceptors/Auth.py

75 lines
2.0 KiB
Python

from application import app
from flask import request, g, make_response, redirect
from common.models.user import User
from common.lib.UserService import UserService
from common.lib.Helper import ops_render
from common.lib.UrlManager import UrlManager
@app.before_request
def before_request():
# 当用户未登录时,在列表中的请求将被重定向到登录界面
filter_list = [
"/",
"/commodity/add",
"/commodity/del",
"/commodity/buy",
"/commodity/send",
"/commodity/trans",
"/commodity/warehouse",
"/commodity/distribution",
"/commodity/sale"
]
app.logger.info("--------before_request:%s--------" % (request.path))
user_info = check_login()
g.current_user = None
app.logger.info("user_info:%s" % user_info)
if user_info:
g.current_user = user_info
app.logger.info("current_user:%s" % g.current_user)
if g.current_user is None:
# 用户未登录
app.logger.info("current_user is null,进行重定向")
if request.path in filter_list:
# 拦截普通请求
response = make_response(redirect(UrlManager.build_url("/member/login")))
response.delete_cookie(app.config["AUTH_COOKIE_NAME"])
return response
return
@app.after_request
def after_request(response):
app.logger.info("--------after_request--------")
return response
'''
判断用户是否登录
'''
def check_login():
cookies = request.cookies
cookie_name = app.config["AUTH_COOKIE_NAME"]
auth_cookie = cookies[cookie_name] if cookie_name in cookies else None
if auth_cookie is None:
return False
auth_info = auth_cookie.split("#")
if len(auth_info) != 2:
return False
try:
user_info = User.query.filter_by(id=auth_info[1]).first()
except Exception:
return False
if user_info is None:
return False
if auth_info[0] != UserService.gene_auth_code(user_info):
return False
return user_info