混淆 pouch-transform 加密和复制

Confusion with pouch-transform encryption and replication

我的目标是确保远程沙发数据库中的所有数据都将被加密。当我按照 pouch-transform 文档中的这个示例进行操作时,我的数据在同步后未在远程端点加密,

pouch.transform({
      incoming: function (doc) {
        encrypt(doc);
      },
      outgoing: function (doc) {
        decrypt(doc);
      }
    });

当我在传出时加密时它确实如此,但在这种情况下我的数据也在本地加密。我在这里做错了什么,加密的重点不是在远程数据库中加密数据吗?所以实现这一点的唯一方法是创建 set/get 包装器并在其中加密?我能以某种方式在拨出电话中检测到文档目的地吗?

isn't the point of encryption to have data encrypted in remote db?

没有。如 package description 中所述:

Apply a transform function to documents before and after they are stored in the database.

换句话说,它只修改静态数据。

此插件对正在发送的数据完全没有影响 to/from CouchDB——仅影响数据在 PouchDB 中的存储方式。

如果你也想加密CouchDB中的文档,你需要在应用层进行。即自己对数据进行加密,以加密形式存储在文档中或作为附件。

我也遇到了这个问题。我不想在复制时转换数据,所以我侵入并添加了一个 replicating 标志以在复制时通过包装函数:https://github.com/pouchdb/pouchdb/pull/7774

并修改了 pouch-transform 包以将选项传递给 outcoming 回调:

{
  // decrypt it here.
  outgoing: async (doc, args: IPouchDBWrapperArgs, type: TransformPouchType) => {
    const {options} = args;
    if (!options.replicating) {
      doc = await this.decryptDoc(doc, options);
    }
    return doc;
  },
};