仅向经过身份验证的用户显示pdf

时间:2010-10-20 18:01:00

标签: python html pdf permissions pylons

我正在建立一个旧网站,我需要展示很多.pdf文件。

我需要用户在看不到我的任何.pdf之前进行身份验证,但我不知道如何(我不能将我的pdf放在我的数据库中)。

我正在使用Pylons和Python。

感谢您的帮助。

如果您有任何疑问,请问我! :)

4 个答案:

答案 0 :(得分:4)

这是我在Pylons中如何做到这一点。我没有对此进行测试,但应该有足够的链接让你前进。

  1. 在HTTP服务器上启用X-SendFile(正如Paul所说,实现取决于服务器):Apache mod_xsendfile,Nginx equivalent
  2. 将Pylons安装中的/ strong目录放在 / public目录下(我建议与Pylons目录处于同一级别的目录)
  3. 为您的网站添加某种身份验证和授权。 Here是关于您如何使用repoze.who(身份验证)和repoze.what(授权)的好文章
  4. 创建一个路由和控制器来处理PDF的请求,这就像任何其他路由和控制器一样。 (即/pdfs/{filename}.pdf的路线)
  5. 如果所有内容都经过授权和正确验证,您可以为正在使用的x-sendfile(或等效文件)创建正确的标题。

答案 1 :(得分:2)

您希望使用X-Sendfile标头发送这些文件。精确的细节将取决于您正在使用的Http服务器。

答案 2 :(得分:2)

Paul对X-Sendfile的建议非常出色 - 这确实是处理实际将文档传回用户的好方法。 (保罗+1:)

至于前端,做这样的事情:

  1. 将您的pdf存储在网络无法访问的位置(例如/ secure)
  2. 提供类似于/unsecure/filename.pdf
  3. 的网址
  4. 让您的HTTP服务器(如果是Apache,请参阅Mod Rewrite)将该链接转换为/normal/php/path/authenticator.php?file=filename.pdf
  5. authenticator.php确认文件存在,用户是合法的(即通过cookie),然后使用X-Sendfile返回PDF。

答案 3 :(得分:0)

使用md5键的文件名就足够了吗?

48cd84ab06b0a18f3b6e024703cfd246-myfilename.pdf

您可以使用filename和datetime.now生成md5密钥。