如何让 AWS Amplify 的 DataStore 在 React 中的用户会话之间同步?

How can I get AWS Amplify's DataStore to sync between user sessions in React?

aws-amplify@3.3.11@aws-amplify/datastore@2.9.0 与 Cognito 用户池结合使用,我可以对模型实例执行 CRUD 操作,并确认它们已进入云端。但是,当我从另一个浏览器登录到同一帐户时,事件似乎不会从云端同步回 down,从而创建不同的用户会话。一个潜在的问题是我的模型使用了两个 @auth 指令:

type TestModel
  @model
  @auth(rules: [
      { allow: owner, operations: [create, delete, update] },
      { allow: owner, ownerField: "members", operations: [read]}]) {
    id: ID!
    name: String!
    owner: String!
    members: [String]
}

认为 权限不是导致问题的原因,因为当我重新加载页面时,我可以看到不同用户的预期状态。只是订阅似乎永远不会同步 down.

我是 React 的新手,只是想确保 DataStore 同步按照我期望的方式工作,所以这段代码非常草率。以下是我设置订阅的方式:

    useEffect(() => {
        const dispatchDataStoreEvent = (msg) => {
            switch(msg.opType) {
                case 'INSERT':
                case 'UPDATE': {
                    console.log('TK dispatchDataStoreEvent UPSERT typeof ', typeof msg.element, msg.element)
                    dispatch(upsertOne(msg.element))
                    return
                }
                case 'DELETE': {
                    console.log('TK dispatchDataStoreEvent DELETE typeof ', typeof msg.element, msg.element)
                    dispatch(vaultDeleted(msg.element))
                    return
                }
                default: {
                    console.log('TK dataStoreDispatcher unhandled optype: ', msg.opType, msg.element)
                    return
                }
            }
        }
        const subscription = DataStore.observe(TestModel, c => c.members('contains', currentUser)).subscribe(msg => {
            dispatchDataStoreEvent(msg)
        })
        return () => subscription.unsubscribe()
    }, [dispatch, currentUser, testModels])

谓词似乎也不重要——当我不使用它时,相同的预期行为(同步事件从不同用户会话中执行的操作触发)丢失了。据我所知,我自动生成的 aws-exports.js 文件与 this subscription spec. The CLI has a special section about authorizing subscriptions but I'm not sure if there's another argument I should be passing in for my call to DataStore.observe. Does DataStore only handle what it calls "[Observe] Data in real-time" 匹配,因此它永远不会动态同步更改?

我可以得到我期望的打开和关闭计算机网络连接的行为。我只是无法在进行更改时让 DataStore 同步。

看起来这是 amplify-js 的一个未解决问题,这是使用所有者数组作为授权规则的限制:DataStore with @auth - subscriptionError ... MissingFieldArgument: Missing field argument editors