代码之家  ›  专栏  ›  技术社区  ›  Tomas Andrle

在Django站点中保护静态媒体访问

  •  13
  • Tomas Andrle  · 技术社区  · 15 年前

    我正在建立一个注册用户可以上传文件的网站。然后这些文件通过Apache提供。只有登录的用户才能访问这些文件。

    我读过 this page 但似乎人们必须登录两次才能访问网站和媒体,每次都使用不同类型的登录框。

    是否有办法解决这个问题,或者是否有其他方法限制使用django身份验证数据库的Apache对静态媒体的访问?

    我用的是mod_python。

    编辑 我是如何在阅读了范盖尔的答案后解决这个问题的 this :

    1. 切换到wsgi。
    2. 安装 mod_xsendfile
    3. 已将所有公共媒体文件移动到/media/public中的子文件夹中
    4. 添加了使用别名/media/public/var/www…/media/public访问公用文件夹的权限
    5. 添加了wsgiscriptaalias/media/protected//var/www…/apache/django.wsgi(与站点其余部分的处理程序相同)
    6. 在上添加了xsendfile,在上添加了xsendfileallowabove
    7. 在django应用程序中,我添加了一个用于/media/protected的urlconf,它基本上完成了 here ,仅为我的身份验证系统修改。它处理诸如/media/protected/group_id/file之类的URL,以便只有该组的成员才能下载这些文件。
    2 回复  |  直到 15 年前
        1
  •  10
  •   Van Gale    15 年前

    通常的方法是将一个特殊的头传递回Web服务器。

    你可以用 nginx 使用x-accel-redirect,如本文所述 Django snippet .

    对于Apache,使用 mod_xsendfile 模块( discussion and examples 在Django用户邮件列表中)。

        2
  •  2
  •   Sergey Golovchenko    15 年前

    如果您可以自由地从Apache切换到 lighttpd ,那么最直接的解决方案是使用 mod_secdownload 它将完全满足您的需要,即在通过Web服务器提供实际文件的同时提供应用程序身份验证。

    但是,如果你一直在使用Apache,那么我建议 mod_auth_token ,这里他们提到了PHP,但是您可以用Python或任何其他语言生成令牌。使用mod auth_令牌,您将能够在应用程序中生成令牌,然后让Web服务器利用该令牌为静态文件提供服务。