Flask-login 原理

1 login_required

内部原理,主要是判断当前用户是否已经授权访问,如果没被授权就调用current_app.login_manager.unauthorized()

current_user.is_authenticated,current_user是哪来的,其实就是通过调用_get_user获得

注: 这里调用current_user.is_authenticated,而不是current_user.is_authenticated(),意味着把方法当属性调用了,那这样的话你的user类需要添加@property

看看_get_user内部实现, 这个用户主要从_request_ctx_stack.top获得,那谁来设置_request_ctx_stack.top,答案是login_user和reload_user

 

 

2 login_user

主要是获取用户ID,写到session的user_id里面,同时设置_request_ctx_stack.top.user = user,这样后面login_required就可以获取这个用户的授权情况了

 

3 logout_user

清掉session的相关字段,然后调用reload_user,这个调用会把这个用户设置为匿名用户anonymous_user

 

4 关于load_user回调

@login_manager.user_loader
def load_user(user_id):

主要是reload_user里面会调用,每个请求过来之后,在判断是否授权的时候,调用_get_user

 

current_app.login_manager._load_user()里面会调用reload_user,reload_user里面会调用这个回调,这个回调返回一个用户,如果返回None,系统就当这个用户是匿名用户

 

posted @ 2017-04-18 20:53  sysnap  阅读(1303)  评论(0编辑  收藏  举报