为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第11天+管理员后台账号模块开发

标签:
Flask

https://coding.imooc.com/learn/list/265.html


课程名称: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

    https://img1.sycdn.imooc.com//632287b50001c02e11690885.jpg

     

     

     

    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

             https://img1.sycdn.imooc.com//632287bf0001937b11730848.jpg

    

     

     

    3.拦截器运行结果

    https://img1.sycdn.imooc.com//632287c70001ea5119201030.jpg

     

     

    4.修改cookie值是否会自动跳转至登录界面

    https://img1.sycdn.imooc.com//632287d20001072d19201030.jpg

           https://img1.sycdn.imooc.com//632287dd0001020619201030.jpg

    

     

     

     

     

     

    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值

    https://img1.sycdn.imooc.com//632287e800018b0b09380734.jpg

     

    运行截图:

         https://img1.sycdn.imooc.com//632287fc000118a119201026.jpg

                   https://img1.sycdn.imooc.com//632288070001f1cf19201030.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消