课程名称:Python Flask构建微信小程序订餐系统
课程章节:第七章 管理员后台账号模块开发——7-3 登录退出(2)
主讲老师:编程浪子
7-3 登录退出(2)
1.拦截器
1.判断是否已登录
查询数据库计算出的cookie值与页面cookie值进行对比
# 判断用户是否已登录
def check_login():
cookies = request.cookies # 字典类型数据
# 存在于字典则取出value值,否则返回""空值
auth_cookie = cookies[app.config['AUTH_COOKIE_NAME']] if app.config['AUTH_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
# 根据uid查询数据库用户信息
try:
user_info = User.query.filter_by(uid=auth_info[1]).first()
except Exception:
return False
# 根据uid无法查询出该用户信息
if user_info is None:
return False
# 查询的user_info对象的加密后的cookie值,与浏览器中的cookie不一致
if auth_info[0] != UserService.geneAuthCode(user_info):
return False
return user_info
2.拦截器实现
核心代码:
from application import app
from flask import request, redirect
from common.models.User import User
from common.libs.user.UserService import UserService
from common.libs.UrlManager import UrlManager
import re
@app.before_request
def before_request():
ignore_urls = app.config['IGNORE_URLS']
ignore_check_login_urls = app.config['IGNORE_CHECK_LOGIN_URLS']
path = request.path
# 静态文件不需要判断
# 正则表达式匹配无需拦截的页面
pattern = re.compile('%s' % "|".join(ignore_check_login_urls))
if pattern.match(path):
return
user_info = check_login()
# 登录页面无需重定向
pattern = re.compile('%s' % "|".join(ignore_urls))
if pattern.match(path):
return
if not user_info:
# 用户cookie值返回False,则页面返回登录页面
return redirect(UrlManager.buildUrl("/user/login"))
return
3.拦截器运行结果
4.修改cookie值是否会自动跳转至登录界面
2.登出操作
核心代码:
@route_user.route("/logout")
def logout():
# 实现登出操作
# 页面重定向至/user/login
response = make_response(redirect(UrlManager.buildUrl("/user/login")))
# 删除response中的cookie值
response.delete_cookie(app.config['AUTH_COOKIE_NAME'])
return response
页面重定向并删除浏览器缓存的cookie值
运行截图:
共同学习,写下你的评论
评论加载中...
作者其他优质文章