2

我有一个对文档进行一些基本身份验证的列表。我遇到的问题是列表正在缓存,因此除非我更新修订 ID,否则用户将看不到他们有权访问。如何显示非缓存列表?

if (req.userCtx.name === doc.permissions.owner) {
    return 'you have permission';   
}
else {
    return 'you do not';
}

我如何想象它是通过在标题中传递 no-cache 或更新 ETAG 或类似的东西来完成的,但似乎没有任何效果。这是我每次在头部发送一个新日期以使其不缓存的尝试,但这不起作用。

var date = new Date().getTime() + 'x';
start({code: 200, headers: {'Content-Type': 'text/html', 'date': date}});

任何想法都非常感谢!

顺便说一句,我正在寻找一个纯粹的沙发解决方案。

4

2 回答 2

1

幸运的是,CouchDB 源代码可用!我能够在以下位置找到此算法couch_mrview_show.erl

show_etag(#httpd{user_ctx=UserCtx}=Req, Doc, DDoc, More) ->
    Accept = couch_httpd:header_value(Req, "Accept"),
    DocPart = case Doc of
        nil -> nil;
        Doc -> couch_httpd:doc_etag(Doc)
    end,
    couch_httpd:make_etag({couch_httpd:doc_etag(DDoc), DocPart, Accept,
        {UserCtx#user_ctx.name, UserCtx#user_ctx.roles}, More}).

在这里,我们可以看到节目被缓存,除非以下事情之一发生变化:

  • 设计文档,包含显示功能
  • 用于渲染节目的文档
  • “接受”HTTP 请求标头
  • 用户名(这意味着节目至少为每个用户呈现一次)
  • 用户上下文中的用户角色集
于 2014-09-12T22:55:30.910 回答
1

所以经过更多的挖掘,我发现了这个:

http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#ETags

切割到重要部分:

  • ETag 由 List 和 Shows 处理
  • 最高版本 1.2 您的用户必须具有角色,然后他们将获得不同的 ETag。
  • 1.3 将为每个用户名引入新的 ETag。

希望这可以帮助某人。

于 2013-02-19T03:29:32.950 回答