密码保护DocPad站点的一部分

时间:2013-01-14 22:10:00

标签: docpad

我想这可能是一个'丢失的案例',但是可以用密码保护DocPad生成的一个或多个页面吗?

是否可以制作插件或其他内容,让您在页面的元数据部分中说出protected = true

或者我是否必须使用.htaccess或类似内容来保护我的网页?

3 个答案:

答案 0 :(得分:5)

如果您计划在node.js托管服务提供商上托管,那么您可以使用以下要点:https://gist.github.com/4557006

我们的想法是使用serverExtend事件添加一个新的express.js中间件。通过serverExtend事件添加的中间件在添加docpad的中间件之前添加,因此这是此认证层的理想位置以及自定义路由/中间件等的大多数其他用例。我们的自定义中间件将检查以查看如果正在请求的文档是否是受保护的文档,如果它不是继续沿着中间件链(可能击中docpad中间件并正常呈现)或者如果它是受保护的文档,那么我们将它转​​发到表达basicAuth中间件。

答案 1 :(得分:2)

我猜你确实可以在页面元数据中声明protected = true并在docpad.coffee中有一个名为protectedPages的集合:

collections:
  protectedPages: (database) ->
    database.findAllLive({protected: true})

然后创建一个看起来像这样的文件.htaccess.eco

AuthUserFile /full/path/to/.htpasswd
AuthType Basic
AuthName "Protected area"

<% for document in @getCollection('protectedPages').toJSON(): %>
  <Files "<%= document.url %>">
    Require valid-user
  </Files>

<% end %>

并且应该很容易将其转换为生成.htaccess文件的插件。您可以使用sitemap plugin作为示例。

答案 2 :(得分:0)

另一种方式(但现在只是一个概念)可能是: 当您使用保护(protected:password或need-access-right:account-list)标记文档时,文档将被加密,然后通过docpad作为静态内容发布。

客户端,如果您访问受保护的页面,则加载加密内容并且脚本要求输入密码(或用于您的帐户信息),然后尝试使用它解密内容。

因此,您可以在静态服务器上拥有受保护的内容,而无需特定于Apache的.htaccess及其性能问题。