2010-10-20 19 views
1

Je construis un site web à partir de l'ancien et j'ai besoin de montrer beaucoup de fichiers .pdf.Afficher uniquement le pdf pour les utilisateurs authentifiés

J'ai besoin que les utilisateurs soient authentifiés avant de ne pouvoir voir aucun de mes fichiers .pdf mais je ne sais pas comment (et je ne peux pas mettre mon pdf dans ma base de données). J'utilise des pylônes avec Python.

Merci pour votre aide.

Si vous avez des questions, demandez-moi! :)

Répondre

4

Voici mon coup de poignard sur la façon de le faire dans les pylônes. Je n'ai pas testé cela, mais il devrait y avoir suffisamment de liens pour vous y rendre.

  1. Activer X-SendFile sur votre serveur HTTP (comme Paul dit, la mise en œuvre dépend du serveur): Apache mod_xsendfile, Nginx equivalent
  2. Mettez les fichiers PDF en dehors le répertoire/public dans vos Pylônes installons (Je suggérerais un répertoire au même niveau que votre répertoire Pylons)
  3. Ajoutez une sorte d'authentification et d'autorisation à votre site. Here est un bon article sur la façon dont vous utilisez repoze.who (Authentification) et repoze.what (Autorisation)
  4. Créez un itinéraire et un contrôleur pour gérer la demande de votre PDF, c'est comme n'importe quel autre route et contrôleur. (c'est-à-dire une route de /pdfs/{filename}.pdf)
  5. Si tout est autorisé et authentifié correctement, vous pouvez créer les bons en-têtes pour le fichier x-sendfile (ou équivalent) que vous utilisez.
2

Vous souhaitez utiliser l'en-tête X-Sendfile pour envoyer ces fichiers. Les détails précis dépendront du serveur Http que vous utilisez.

2

La suggestion de Paul de X-Sendfile est excellente - c'est vraiment une excellente façon de faire en sorte que le document soit remis à l'utilisateur. (+1 pour Paul :)

Quant à l'avant, faire quelque chose comme ceci:

  1. Stockez vos pdfs quelque part pas accessible par le web (par exemple/secure)
  2. offre une URL qui ressemble comme /unsecure/filename.pdf
  3. Demandez à votre serveur HTTP (si elle est Apache, voir Mod Rewrite) convertir ce lien dans /normal/php/path/authenticator.php?file=filename.pdf
  4. confirme authenticator.php que le fichier existe, que l'utilisateur est légitime (ie via un cookie), puis utilise X-Sendfile pour retourner e PDF.
+0

Pour les pylônes vous feriez tout cela est le routage/contrôleurs, évidemment :) – Ben

+0

@Ben - ouais, si vous savez réellement comment le faire dans Pylons, je vais vous upvote ... Je ne suis pas un Python ou Pylons programmeur :) – Ryley

0

Peut-être que le nom du fichier avec la clé md5 sera suffisant?

48cd84ab06b0a18f3b6e024703cfd246-myfilename.pdf

Vous pouvez utiliser le nom de fichier et datetime.now pour générer la clé md5.