如何使用Amazon S3和Boto仅为Django中经过身份验证的用户提供上传的文件?

时间:2012-03-07 23:32:00

标签: django amazon-s3 boto

我有这样的案例:

我有一个后台面板。经过身份验证的用户可以将文件上载到系统。我的Django代码将文件上传到Amazon S3服务器,然后公开。

现在,我想要的是,直接写入图片网址的人无法看到文件(让我们说照片),但经过身份验证的用户可以看到这些文件。

有可能吗?

1 个答案:

答案 0 :(得分:3)

您可以在视图上使用@login_required decorator,只有在用户登录时才会显示图片。Django documentation的用户身份验证部分涵盖所有这些东西。

或者,您可以检查用户是否通过视图中的request.user登录,然后不将上下文中的图像详细信息传递给模板。

如果没有用户登录,或者不渲染模板的部分(我认为可能是最丑陋的方法)

{% if user.is_authenticated %}
    # Do the template stuff
{% endif %}

至于限制s3的访问,它稍微复杂一些。您需要在存储桶中使您的文件非公开,然后在Django中生成具有查询字符串的URL,允许经过身份验证的用户访问以下载具有时间限制的特定s3对象。有关详细信息,请访问s3 documentation。关于SO here之前已经提出过类似的问题。