2

ドキュメントの基本認証を含むリストがあります。私が抱えている問題は、リストがキャッシュされているため、リビジョンIDを更新しない限り、ユーザーがアクセスできることを確認できないことです。キャッシュされていないリストをどのように表示しますか?

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

キャッシュなしを渡すか、ヘッダーでETAGまたはそのようなものを更新することで、私はそれが行われると想像しますが、何も機能していないようです。これは、キャッシュしないようにするために毎回ヘッドに新しい日付を送信する試みですが、これは機能しません。

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

どんなアイデアでも大歓迎です!

ちなみに私は純粋なソファの解決策を探しています。

4

2 に答える 2

1

それで、もっと掘り下げた後、私はこれを見つけました:

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

重要な部分へのカット:

  • ETagはリストとショーによって処理されます
  • バージョン1.2までのユーザーはロールを持っている必要があり、そうするとユーザーは異なるETagを取得します。
  • 1.3では、ユーザー名ごとに新しいETagが導入されます。

これが誰かを助けることを願っています。

于 2013-02-19T03:29:32.950 に答える
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}).

ここでは、次のいずれかが変更されない限り、ショーがキャッシュされていることがわかります。

  • show関数を含む設計ドキュメント
  • ショーをレンダリングするために使用されるドキュメント
  • 'Accept'HTTPリクエストヘッダー
  • ユーザー名(これは、showがユーザーごとに少なくとも1回レンダリングされることを意味します)
  • ユーザーコンテキストでのユーザーロールのセット
于 2014-09-12T22:55:30.910 に答える