2012-03-07 1 views
1

J'ai un cas comme celui-ci:Comment servir les fichiers téléchargés uniquement pour les utilisateurs authentifiés dans Django en utilisant Amazon S3 et Boto?

J'ai un panneau de backoffice. Les utilisateurs authentifiés peuvent télécharger des fichiers sur le système. Mon code Django télécharge les fichiers sur le serveur Amazon S3 et il devient public.

Maintenant, ce que je veux, c'est que les gens qui écrivent directement l'URL de l'image ne peuvent pas voir les fichiers (disons les photos) mais les utilisateurs authentifiés peuvent voir les fichiers.

Est-ce possible?

Répondre

2

Vous pouvez utiliser le @login_requireddecorator sur la vue qui montre aux gens l'image si elles entrent dans l'URL que s'ils sont connectés. L'utilisateur section Auth du Django documentation couvre tous ce genre de choses.

Vous pouvez également vérifier si l'utilisateur est connecté via request.user dans la vue, puis ne pas transmettre les détails de l'image dans le contexte du modèle.

Ou pas render parties du modèle s'il n'y a pas d'utilisateur connecté (je pense que probablement la méthode la plus laide)

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

Comme pour limiter l'accès à s3, est un peu plus complexe. Vous devez rendre vos fichiers non-publics dans le compartiment, puis générer des URL dans Django qui ont une chaîne de requête permettant à un utilisateur authentifié d'accéder à un objet s3 particulier avec une limite de temps. Les détails à ce sujet peuvent être trouvés au s3 documentation. Une question similaire a été posée avant here sur SO.

+0

Oui, je sais à ce sujet, mais que se passe-t-il si quelqu'un essaie et trouve l'URL publique et y accède à partir du navigateur? – Burak

+0

Que voulez-vous dire par trouve l'URL publique? Comme dans le fichier sur s3? Ou via votre application? – jvc26

+0

Comme je sais, quand vous téléchargez 'a.jpg' à S3 dans un compartiment b, son URL publique est 'http://b.s3.amazonaws.com/a.jpg. Donc tout le monde peut voir cette image. Ce que je veux, c'est que seules les personnes authentifiées dans mon application peuvent voir ces photos. – Burak

Questions connexes