如何让 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
将 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