当前位置: 首页 > news >正文

Flask_Login使用与源码解读

一、前言

用户登录后,验证状态需要记录在会话中,这样浏览不同页面时才能记住这个状态,Flask_Login是Flask的扩展,专门用于管理用户身份验证系统中的验证状态。

注:Flask是一个微框架,仅提供包含基本服务的核心(路由、网关接口、模板),其它功能都是通过扩展来实现,它有无数扩展,你可以根据需要自由组合,这一系列文章我们会来介绍一下这些扩展的使用以及解读一下其源码,另外关于分布系统登录方案可以参考 《Session、Token、Jwt三种登录方案介绍》。

二、登录认证主要代码

pip install flask-login

1、模型中定义User对象

注:User对象继承UserMixin

注:配置user_loader,用于被回调。

2、初始化flask-login

初始化Login_manager对象,并且设置登录页面地址,这样当匿名用户访问时会重定向到登录页。

3、登录

注:调用login_manager 的login_user方法进行登录。

4、接口拦截

注:相当于一个拦截器,当匿名用户调用配置了装饰器的该接口后会被重定向到登录页。

三、flask-login源码分析

1、UserMixin

注:User模型继承自UserMixin,它提供了缺省配置实现,可以满足大多数场景的需求。

2、登录

关键代码调用flask_login中的login_manager.login_user(user,form.remember_me.data)

注:构建session对象,包括sessionid以及user_id(用户表主键),其中sessionid是调用utils.py _create_identifier生成。

注:这样生成的sessionid只要user-agent和IP相同就是一样的????

remember保持登录状态,每次重新登录会往后延。

current_app.login_manager._update_request_context_with_user(user)

注:将User对象存储到当前的request_context中。

user_logged_in.send(current_app._get_current_object(), user=_get_user())

user_logged_in是flask_login定义的Signals,这里将user对象为信号传递给相应的回调函数。

3、拦截

@require_login  装饰器

注:如果当前用户 is_authenticated为True则正常处理请求,否则进入login_manager.

unauthorized()的处理流程(重定向到登录页,登录后跳回本地址)

current_user的定义

注:current_user通过_get_user()来获取用户,一般会返回要么是正常用户(签权成功),要么是匿名用户(签权失败)。

注:如果用户登录后,会将user存储在当前request_context中,我们就可以直接获取,如果request_context中没有user对象,将调用_load_user()来恢复(服务器重启就会走这个路径,浏览器并不需要重新登录)

如果session中还有user_id,通过id调用 user_loade装饰器加载用户,如果没有id则通过remeber cookie、request、request header依次尝试去加载用户。

注:源码中关于回调那块用了Python的Signals机制(信号机制)这个下次再学习。

相关文章:

Flask_Login使用与源码解读

一、前言 用户登录后,验证状态需要记录在会话中,这样浏览不同页面时才能记住这个状态,Flask_Login是Flask的扩展,专门用于管理用户身份验证系统中的验证状态。 注:Flask是一个微框架,仅提供包含基本服务的…...

利用Graviton2和S3免费套餐搭建私人网盘

网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度&#xff0…...

跟着GPT学设计模式之单例模式

单例设计模式(Singleton Design Pattern)一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 单例有几种经典的实现方式,…...

【MySQL索引与优化篇】数据库调优策略

数据库调优策略 文章目录 数据库调优策略1. 数据库调优的措施1.1 调优目标1.2 如何定位调优问题1.3 调优的维度和步骤第1步:选择合适的DBMS第2步:优化表设计第3步:优化逻辑查询第4步:优化物理查询第5步:使用 Redis 或 …...

基于BP神经网络的风险等级预测,BP神经网络的详细原理,

目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 代码链接:基于BP神经网络的风险等级评价,基于BP神经网络的风险等级预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.n…...

最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

项目资源不足,常见的5种处理方式

软件开发中,经常会遇到项目资源不足的情况,项目团队如果无法及时获得所需的人力、财力、物力等资源,往往会影响团队士气以及任务质量,造成无法按时完成任务,进而影响项目进度。 因此及时处理和应对资源不足的情况&…...

ER图设计神器,帮你省时省力,高效完成工作!

ER图(Entity-Relationship Diagram)工具用于设计数据库模型,通常用于表示数据实体、关系和属性之间的关系。以下是10个好用的ER图工具。 一、Lucidchart Lucidchart 是一款基于云的协作式图表设计工具,它允许用户创建、编辑和共享…...

Notepad++下载、使用

下载 https://notepad-plus-plus.org/downloads/ 安装 双击安装 选择安装路径 使用 在文件夹中搜索 文件类型可以根据需要设置 如 *.* 说明是所有文件类型; *.tar 说明是所有文件后缀是是tar的文件‘;...

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 仿钉钉的开源项目网上也不少,而且很多功能已经也比较完善了,但大部分都不是MIT协议…...

【知网检索征稿】第九届社会科学与经济发展国际学术会议 (ICSSED 2024)

第九届社会科学与经济发展国际学术会议 (ICSSED 2024) 2024 9th International Conference on Social Sciences and Economic Development 第九届社会科学与经济发展国际学术会议(ICSSED 2024)定于2024年3月22-24日在中国北京隆重举行。会议主要围绕社会科学与经济发展等研究…...

带你人工识别C#开源库BarcodeLib生成的一维码Code128

我们是做HIS系统开发的,前段时间发现某些处方的一维码出现无法识别的情况。看了一下一维码生成的逻辑,使用到了BarcodeLib库,经过反复确认,我们程序是没有问题的。后面不得不反编译看一下BarcodeLib生成一维码的逻辑。最后调整一维…...

软考 系统架构设计师系列知识点之系统架构评估(6)

接前一篇文章:软考 系统架构设计师系列知识点之系统架构评估(5) 所属章节: 第8章. 系统质量属性与架构评估 第2节. 系统架构评估 8.2.1 系统架构评估中的重要概念 相关试题 3. 正确识别风险点、非风险点、敏感点和权衡点是进行软…...

指挥通信车360度3d虚拟互动展示系统的优势及特点

通信车是装有通信装备,用于保障通信联络的专用车辆,用于偏僻/特殊环境下的机动通信。并且机动通信局装备通常分为应急综合通信车、网络管理车、程控电话车、自适应跳频电台车、数字扩频接力车、散射通信车、卫星通信车、光缆引接车、线缆收放车和通信电源…...

根据Aurora发送时序,造Aurora 发送数据包

首先Aurora采用AXIS接口 由于后续需要进行AXIS接口 不同时钟域的数据位宽转换(64bit和256bit之间的转换),因此分两次走。 第一种方法:采用AXIS数据位宽转换IP AXIS跨时钟域IP 第二种方法:逻辑完成 下面记录逻辑…...

vue实现一个账号在同一时间只有一个能登录的效果

目录 1.实现方法 2.实现示例 1.实现方法 要实现一个账号在同一时间只有一个能登录的效果,你可以使用以下步骤来实现: 在后端服务器端设置一个标志位,用于标记用户是否已登录。这个标志位可以存储在数据库中或者缓存在服务器内存中。当用户…...

react-hook-form。 useFieldArray Controller 必填,报错自动获取较多疑问记录

背景 动态多个数据Controller包裹时候,原生html标签input可以add时候自动获取焦点,聚焦到最近不符合要求的元素上面 matiral的TextField同样可以可是x-date-pickers/DatePicker不可以❌ 是什么原因呢,内部提供foucs??属…...

最近收藏的各类好用API接口,含免费次数

IP应用场景- IPv4:IPv4应用场景是获取IP场景属性的在线调用接口,具备识别IP真人度,提升风控和反欺诈等业务能力。IP应用场景基于地理和网络特征的IP场景划分技术,将IP划分为含数据中心、交换中心、家庭宽带、CDN、云网络等共计18类…...

第01章 Linux下MySQL的安装与使用

第01章 Linux下MySQL的安装与使用 1. 安装前说明 1.1 查看是否安装过MySQL 如果你是用rpm安装, 检查一下RPM PACKAGE: rpm -qa | grep -i mysql # -i 忽略大小写检查mysql service: systemctl status mysqld.service1.2 MySQL的卸载 1. 关闭 mysql…...

kafka入门教程,介绍全面

1、官网下载最新版本的kafka,里面已经集成zookeeper。直接解压到D盘 2、配置文件修改,config目录下面的zookeeper.properties. 设置zookeeper数据目录 dataDirD:/kafka_2.12-3.6.0/tmp/zookeeper 3、修改kafka的配置文件server.properties. 主要修…...

Claude Code 源码架构深度解析(二):Claude Code 最核心的 1729 行:一个 Agent Runtime 是怎么运转的

一个请求进来,到底发生了什么 上一篇我们建立了一个认知:Claude Code 不是 CLI 工具,而是 Agent Operating System。 但知道它"是什么"还不够。这一篇,我们要打开它的引擎盖,看看里面到底怎么转的。 当你…...

Windows下用mklink命令迁移谷歌浏览器到D盘(附详细步骤图)

Windows系统迁移谷歌浏览器的终极方案:mklink命令深度解析 你是否也遇到过C盘空间告急的窘境?作为开发者日常必备工具的谷歌浏览器,随着缓存和扩展程序的不断累积,往往会占据大量系统盘空间。本文将带你深入探索Windows系统中mkli…...

【实战指南】Windows10链路聚合配置:从LBFO报错到NetSwitchTeam的完美切换

1. 为什么需要链路聚合?从原理到应用场景 当你用笔记本连着WiFi下载大文件时,突然需要视频会议,是不是常遇到网络卡顿?这就是单网口的瓶颈。链路聚合(Link Aggregation)就像把多条车道合并成高速公路&#…...

FRCRN语音降噪效果实测:对比传统谱减法,信噪比提升30%+案例

FRCRN语音降噪效果实测:对比传统谱减法,信噪比提升30%案例 1. 项目背景与模型介绍 语音降噪技术在实际应用中一直是个难题。传统的降噪方法往往在消除噪声的同时,也会损伤人声质量,导致语音听起来不自然或者失真。FRCRN&#xf…...

【高清视频】PCIe 5.0 144 Lane 8槽位 PCIe Switch卡实拍讲解

我们之前拍摄了一个基于Broadcom的PCIe 5.0 PEX89144的144 lane的PCIe 5.0的扩展板 - “一张144 lane Gen5 switch卡,如何在桌面上扩出8个x16 PCIe测试环境?”,但是当时没有连接主机进行lspci的演示,今天的视频补上,感…...

Qwen3.5-2B在WSL2中的开发环境配置指南

Qwen3.5-2B在WSL2中的开发环境配置指南 1. 为什么选择WSL2进行AI开发 对于习惯Windows系统但又需要Linux环境的开发者来说,WSL2提供了一个近乎完美的解决方案。它能在Windows系统上运行完整的Linux内核,性能接近原生Linux,同时又能与Window…...

Kandinsky-5.0-I2V-Lite-5s部署教程:Ubuntu 22.04 LTS环境完整安装与验证

Kandinsky-5.0-I2V-Lite-5s部署教程:Ubuntu 22.04 LTS环境完整安装与验证 1. 环境准备与快速部署 Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型,能够将静态图片转换为5秒左右的短视频。在开始之前,请确保你的系统满足以下要求&#…...

别再只盯着神经网络了!聊聊AI的另外两条路:专家系统和强化学习怎么用

当深度学习不是最优解:专家系统与强化学习的实战突围指南 在科技媒体的狂轰滥炸下,神经网络几乎成了人工智能的代名词。但当我们真正将AI技术落地到企业级场景时,往往会发现:那些需要处理小样本数据、要求决策过程透明可解释、或者…...

OpenClaw技能开发入门:为Qwen3.5-9B-AWQ-4bit定制图片OCR模块

OpenClaw技能开发入门:为Qwen3.5-9B-AWQ-4bit定制图片OCR模块 1. 为什么需要定制OCR技能 去年我在整理几千张产品截图时,发现现有的OCR工具存在三个痛点:无法自动矫正倾斜拍摄的图片、识别结果缺乏结构化处理、无法与工作流联动。这正是Ope…...

技术创业中的风险管理:从内核开发到商业稳定

技术创业中的风险管理:从内核开发到商业稳定 技术创业的风险挑战 作为一名从Linux内核开发者转型产品经理再到科技创业者的人,我深刻体会到风险管理在技术创业中的重要性。技术创业过程中充满了各种风险,从技术风险到商业风险,从市…...