做外贸做几个网站合适,app商城需要手机网站吗,wordpress点播视频模版,wordpress pdf插件下载一、前言
用户登录后#xff0c;验证状态需要记录在会话中#xff0c;这样浏览不同页面时才能记住这个状态#xff0c;Flask_Login是Flask的扩展#xff0c;专门用于管理用户身份验证系统中的验证状态。
注#xff1a;Flask是一个微框架#xff0c;仅提供包含基本服务的…一、前言
用户登录后验证状态需要记录在会话中这样浏览不同页面时才能记住这个状态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机制信号机制这个下次再学习。