一个路由的 Flask 身份验证覆盖

Flask Authentication Override for one Route

我是 python 的新手,正在为 Flask Web 服务器编写一个小代码。 我需要一个解决方案来实现以下场景。

我有 app.py 调用 settings.py 获取 flask 用户 ID 和密码,还有一个 route.py 来处理路由。 现在我希望仅要求用户对少数路由进行身份验证,而其他路由应覆盖身份验证并根据特定 users/specific 主机执行操作。 这能实现吗?

截至目前,它要求对所有路由进行身份验证

你可以写一个装饰器。装饰器通常在您要使用的函数定义之前被调用(在这种情况下,每当您想要验证您的路由时)。

例如:

def requires_auth():
    def wrapper(f):
        @wraps(f)
        def decorated(*args, **kwargs):
            if 'id' not in flask.session:
                return unauthorized_abort()
            else:
                if flask.session['first_login']:
                    return f(*args, **kwargs)
                else:
                    return flask.render_template('change_password.html')
        return decorated
    return wrapper

写完这个装饰器后,我们可以轻松地只对特定路由使用身份验证。下面的代码显示 @require_auth() 这将很容易地帮助特定路线。

@app.route('/data/get_data',methods=['GET'])
@requires_auth()
def get_data():

虽然上面的答案解决了我的疑问,但我一直在寻找更具体的场景。 这是我更改的内容,

我在烧瓶设置中评论了#app.config['BASIC_AUTH_FORCE'] = True

这是 routes.py 中发生的变化 添加 basic_auth = BasicAuth(应用程序) 我添加了这个装饰器 @basic_auth.required 需要认证的路由。

作为一项安全措施,我只允许来自使用 headers 的特定主机的未经身份验证的请求。