使用 htpassword 和单独文件中的路由进行 Flask 身份验证

问题描述

我正在更新现有的大学系内部网站,以便使用 Flask 运行。在我们完全发布将使用 shibboleth 管理身份验证的项目之前,我一直在尝试使用 this tutorial 设置使用 htpassword 进行测试的身份验证。我可以使用适用于单个文件的 htpasswords 进行身份验证,但我不知道如何将身份验证添加到单独的文件中。目前,该项目如下所示:

这是我名为 app.py 的主文件

#app.py
from flask import Flask
from flask_htpasswd import HtPasswdAuth

app = Flask(__name__)
app.config['FLASK_HTPASSWD_PATH'] = '.htpasswd'
app.config['FLASK_SECRET'] = "Super secret key that I will change later"

htpasswd = HtPasswdAuth(app)

import exampleRoute

@app.route('/')
@htpasswd.required
def home(user):
    return "This is the homepage"

这是我的一个名为 exampleRoute.py 的路由文件的示例:

# exampleRoute.py
from app import app
from flask import Flask

@app.route('/exampleRoute')
def exampleRoute():
    return "This is an example route in another file"

当我将 @htpassword.required 装饰器放在 exampleRoute() 前面时,我收到一条错误消息,指出 htpassword 未定义(这是有道理的)。我尝试以几种不同的方式导入应用程序配置,但充其量,我最终得到了循环依赖。我知道我可以将身份验证代码放在一个单独的文件中,然后将其导入我的所有端点,但我认为这是不可能的,因为此方法已合并到应用程序配置中。

解决方法

我最终收到了来自 reddit 用户 answeralexisprince。解决方案是使用从另一个文件(名为 htpasswd)导入 extensions.py 的蓝图。