flask-login模块中login_required装饰器
先看看源码
def login_required(func):
@wraps(func)
def decorated_view(*args, **kwargs):
if request.method in EXEMPT_METHODS:
return func(*args, **kwargs)
elif current_app.login_manager._login_disabled:
return func(*args, **kwargs)
elif not current_user.is_authenticated:
return current_app.login_manager.unauthorized()
return func(*args, **kwargs)
return decorated_view
EXEMPT_METHODS参数为EXEMPT_METHODS = set(['OPTIONS']),
current_app.login_manager._login_disabled 默认是False,在login_manager.py第119行,
self._login_disabled = app.config.get('LOGIN_DISABLED', False),如果没有设置的话,默认是False,
一般会进行到第三句判断,current_user.is_authenticated,判断当前用户是否认证,如果没有认证的话就执行unauthorized(),
unauthorized()会重定向到login_view参数设置的路由函数中去,所以在实例化LoginManager后要设置login_view属性,
当用户没有登陆时,会自动重定向到登陆界面,没有设置会返回401错误, 用户登陆后,这个装饰器就直接返回func(*args, **kwargs),相当于没有包装一样,装饰器起到包装接口的作用。
本文深入解析Flask-Login模块中的login_required装饰器工作原理。该装饰器通过判断请求方法、登录状态等条件,实现对用户认证的控制,未认证用户将被重定向至登录页面。了解其内部机制有助于开发者更好地运用Flask进行权限管理。

2135

被折叠的 条评论
为什么被折叠?



