【问题标题】:How can I get AWS Amplify's DataStore to sync between user sessions in React?如何让 AWS Amplify 的 DataStore 在 React 中的用户会话之间同步?
【发布时间】:2020-12-15 19:02:57
【问题描述】:

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 匹配。 CLI 有一个关于authorizing subscriptions 的特殊部分,但我不确定是否应该传递另一个参数来调用DataStore.observeDataStore 是否只处理它所称的 "[Observe] Data in real-time" 以从不动态同步更改?

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

【问题讨论】:

    标签: reactjs aws-amplify amplifyjs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 2022-12-06
      • 1970-01-01
      • 2019-07-09
      • 2020-09-20
      • 1970-01-01
      • 2019-10-11
      • 2020-10-14
      • 2016-06-18
      相关资源
      最近更新 更多