Flask 中的登陆校验
程序员文章站
2022-04-18 09:31:34
...
请求的登陆校验是个常见的需求,如果使用 Flask 框架,一般会使用 flask-login 这个库,说说使用遇到几点问题
- 怎么全局禁用login检查呢?
flask-login 提供了一个配置项 LOGIN_DISABLED
, 开发和mock的时候有时候有这个需求。
app = Flask(__name__)
app.secret_key = "session secret key. TODO: store it securely"
app.config['LOGIN_DISABLED'] = True
- how to handle
view
andblueprint
login check ?
flask-login 提供了一个 view 级别的 decorator,login_required
, 基本和 django 提供的类似
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
那么要对 blueprint
做 loing check呢? blueprint 中提供了一个 before_request
的 hook,这里可以利用上
def bp_login_required():
"""
usage:
apibp = Blueprint('api', 'api_bp')
apibp.before_request(bp_login_required)
"""
if current_app.login_manager._login_disabled:
pass
# ajax not 302
elif not current_user.is_authenticated:
if request.is_xhr:
abort(401)
else:
return current_app.login_manager.unauthorized()
上一篇: 详解如何备份及恢复 Linux 文件权限
下一篇: token的登陆校验小结