Flask_Login使用与源码解读

这篇具有很好参考价值的文章主要介绍了Flask_Login使用与源码解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

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

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

二、登录认证主要代码

pip install flask-login

1、模型中定义User对象

Flask_Login使用与源码解读,Python&Go,flask,python,后端

注:User对象继承UserMixin

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

2、初始化flask-login

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

3、登录

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

4、接口拦截

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

三、flask-login源码分析

1、UserMixin

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

2、登录

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

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

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

current_app.login_manager._update_request_context_with_user(user)

Flask_Login使用与源码解读,Python&Go,flask,python,后端

注:将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  装饰器

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

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

current_user的定义

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

Flask_Login使用与源码解读,Python&Go,flask,python,后端

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

注:源码中关于回调那块用了Python的Signals机制(信号机制)这个下次再学习。文章来源地址https://www.toymoban.com/news/detail-736453.html

到了这里,关于Flask_Login使用与源码解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python开发】一文详解Flask-Login

    Flask-Login 为 Flask 提供用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务。 Flask-Login 不绑定到任何特定的数据库系统或权限模型。唯一的要求是您的 用户对象实现一些方法 ,并且您向能够 从用户 ID 加载用户 的扩展提供回调。 GitHub:https://github.com/maxcountr

    2023年04月12日
    浏览(27)
  • 如何使用Flask-Login来实现用户身份验证和安全性?

    当你想要在你的Flask应用中实现用户身份验证和安全性时,Flask-Login这个扩展将会是你的最佳伙伴。它提供了一组简单而强大的工具来处理用户登录、注销和其他安全相关的操作。下面,我将以一个新手的角度,用尽可能轻松的语气来解释如何使用Flask-Login。 首先,你需要在你

    2024年02月15日
    浏览(33)
  • Flask 学习-88. jsonify() 函数源码解读深入学习

    flask 有个jsonify() 函数,如果返回的是一个字典,那么调用 jsonify 创建一个响应对象。 视图函数的返回值会自动转换为一个响应对象。 如果返回值是一个字符串,那么会被 转换为一个包含作为响应体的字符串、一个 200 OK 出错代码 和一个 text/html 类型的响应对象。 如果返回值

    2024年02月03日
    浏览(71)
  • go中读写锁(rwmutex)源码解读实现原理

    1、RWMutex读写锁的概念 读写锁也就是我们所使用的RWMutex,其实是对于go本身的mutex做的一个拓展,当一个goroutine获得了读锁后,其他goroutine同样可以获得读锁,但是不能获得写锁。相反,当一个goroutine获得了写锁,其他goroutine既不能读也不能写,互斥的概念。 2、使用场景 适

    2024年02月11日
    浏览(28)
  • go web框架 gin-gonic源码解读02————router

    本来想先写context,但是发现context能简单讲讲的东西不多,就准备直接和router合在一起讲好了 router是web服务的路由,是指讲来自客户端的http请求与服务器端的处理逻辑或者资源相映射的机制。(这里简单说说,详细的定义网上都可以查到) 那一个优秀的web router应该提供以下

    2024年02月12日
    浏览(28)
  • go web框架 gin-gonic源码解读03————middleware

    今天打完游戏有空整理整理之前看的gin的中间件设计,go的中间件设计相较于前两站还是蛮简单,蛮容易看懂的,所以顺便把context也一起写一下。 中间件是现在web服务里统一化拓展最常用的功能,,他是为了在我们的web服务中实现一些可重复使用,可组合的功能方法、可以让

    2024年02月11日
    浏览(24)
  • go web框架 gin-gonic源码解读01————Engine

    gin-gonic是go语言开发的轻量级web框架,性能优异,代码简洁,功能强大。有很多值得学习的地方,最近准备把这段时间学习gin的知识点,通过engine,context,router,middleware几篇博客文章总结总结。 而Engine是gin框架最核心的结构体。 为什么gin需要设计一个 Engine 结构体? 因为gi

    2024年02月14日
    浏览(29)
  • Flask-SocketIO和Flask-Login联合开发socketio权限系统

    设置 Flask, Flask-SocketIO, Flask-Login : 首先,确保安装了必要的库: 基础设置 : 定义登录路由 : 定义 SocketIO 路由并进行身份验证 : 简单的登录页面 ( templates/login.html ) : 简单的首页 ( templates/index.html ) : 创建一个简单的首页 ( index.html ),用户登录后可以发送消息到服务器,然后接收服

    2024年02月11日
    浏览(28)
  • Flask-Sockets和Flask-Login联合实现websocket的登录认证功能

    flask_login 提供了一个方便的方式来管理用户会话。当你在 Flask 的 HTTP 视图中使用它时,你可以简单地使用 @login_required 装饰器来确保用户已登录。 但是, flask_sockets 并没有直接与 flask_login 集成。如果你想在建立 WebSocket 连接时检查用户是否已登录,你需要采取一些额外的步骤

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包