仅授权用户访问媒体文件

时间:2019-04-10 12:14:53

标签: python django nginx media access

我在Django 1.0.4中有项目-是的,我知道它很旧。

我想让未登录的用户无法访问媒体(音频)文件。 对nginx进行更改后,登录用户也无权访问。

我尝试使用视图和网址功能-没有结果

我的nginx设置:

location /media/content/audio/ {
    deny all;
}

我的功能和网址

    @login_required
    def protected_serve(request, path, document_root=None, show_indexes=False):
        if not request.user.is_authenticated:
            raise Http404()
        else:
            return serve(request, path, document_root, show_indexes)

    urlpatterns += patterns('',
        (r'^media/content/audio/(?P<path>.*)$', protected_serve),
    )

1 个答案:

答案 0 :(得分:0)

您非常接近将整个难题组合在一起。您需要做两件事:

  1. 配置NGINX,您确实希望能够提供来自特定文件夹的数据,但是该文件夹不是公开的。从文件夹发送文件的授权将来自NGINX背后的应用程序,而不是来自对NGINX的外部请求。

  2. 让您的django应用将对NGINX的响应发送给NGINX,NGINX理解为这意味着“将保护区中的文件保存在1中”

您实现第一个目标的方法是使用config指令“ internal”

实现第二个目标是使用HTTP响应标头“ X-Accel-Redirect”作为上述注释中的@ralf状态。

以下是有关该主题的博客文章:https://clubhouse.io/developer-how-to/how-to-use-internal-redirects-in-nginx/

可以帮助您实现相同目标的Python项目:https://pypi.org/project/django-transfer/

NGINX文档:https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/