gpt4 book ai didi

python - 限制登录用户访问静态文件

转载 作者:太空狗 更新时间:2023-10-29 19:36:40 24 4
gpt4 key购买 nike

我想限制文件对登录用户可用,否则返回 403 错误或类似错误。例如,用户只有在登录后才能查看/下载 /static/data/example.csv

我知道如果他们没有登录,如何使用 Flask-Login 控制文件的实际显示,但不知道如果他们直接在浏览器中访问链接,如何阻止对文件的访问。

最佳答案

flask adds a static route提供静态文件。当您在生产中时,您通常会“短路”此路由,以便 Nginx 在请求到达您的应用程序之前提供文件。不要添加此“短路”,而是将其保留并让 Flask 处理请求。用 Flask-Login 的 login_required 包装的路由覆盖静态路由。

from flask_login import login_required

app.view_functions['static'] = login_required(app.send_static_file)

但这通常是矫枉过正,因为您希望无论如何都提供真正的静态文件,以便页面对未登录的用户看起来正确(否则甚至不会发送 CSS登录页面)。相反,“短路”由 Nginx 提供服务的静态文件夹,并定义一个路由,该路由将提供来自其他目录(例如实例文件夹)的 protected 文件。参见 flask.send_from_directory .

import os
from flask import send_from_directory
from flask_login import login_required

@app.route('/protected/<path:filename>')
@login_required
def protected(filename):
return send_from_directory(
os.path.join(app.instance_path, 'protected'),
filename
)

这将提供来自 instance folder 中“protected”目录的文件。仅登录用户。还可以添加其他限制,例如只允许某些用户访问某些文件。与静态路径类似,您可以生成文件的 url:

url_for('protected', filename='data/example.csv')

关于python - 限制登录用户访问静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com