【发布时间】: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.observe。 DataStore 是否只处理它所称的 "[Observe] Data in real-time" 以从不动态同步更改?
我可以得到我期望的打开和关闭计算机网络连接的行为。进行更改时,我无法让 DataStore 同步。
【问题讨论】:
标签: reactjs aws-amplify amplifyjs