我使用 React Native 和 Amplify Data 创建了一个 AWS Amplify 应用程序。 我为团队和团队成员设置了架构。 目前使用的身份验证是 AWS Cognito 用户池,其授权已添加到 Amplify Data 中的架构定义中:
authorization((allow) => [
allow.ownersDefinedIn("owners"),
]),
添加新团队成员时,将使用 lambda 函数将新团队成员添加到团队所有者中,并更新成员所有者数组。 这是直接在 DyanmoDB 表中完成的。
当我打电话返回团队成员时(见下文),返回过时的数据:
const { data: teamMembers } = await team.members();
我定义了以下模式:
const schema = a.schema({
Team: a
.model({
code: a.string().required(),
members: a.hasMany("Member", "teamId"),
owners: a.string().array(),
})
.secondaryIndexes((index) => [index("code")])
.authorization((allow) => [
allow.ownersDefinedIn("owners"),
]),
Member: a
.model({
firstname: a.string().required(),
surname: a.string().required(),
fullName: a.string().required(),
email: a.email().required(),
teamId: a.id().required(),
team: a.belongsTo("Team", "teamId"),
owners: a.string().array(),
})
.authorization((allow) => [
allow.ownersDefinedIn("owners"),
]),
});
我还定义了一个 lambda 函数来向现有团队添加成员。 它通过将新成员用户 ID 添加到所有者数组来实现此目的:
const updateInput: UpdateItemCommandInput = {
TableName: tablename,
Key: {
id: team.id,
},
UpdateExpression: "set owners = :o",
ConditionExpression: "id = :i",
ExpressionAttributeValues: {
":o": {
L: [
...(team["owners"]["L"] as []),
{
S: memberId,
},
],
},
":i": team.id,
},
ReturnValues: "ALL_NEW",
};
const updateCommand = new UpdateItemCommand(updateInput);
return await ddbClient.send(updateCommand);
团队的每个成员也重复此操作:
const updateInput: UpdateItemCommandInput = {
TableName: tablename,
Key: {
id: entity.id,
},
UpdateExpression: "set owners = :o",
ConditionExpression: "teamId = :t",
ExpressionAttributeValues: {
":o": {
L: [...owners],
},
":t": team.id,
},
ReturnValues: "ALL_NEW",
};
const updateCommand = new UpdateItemCommand(updateInput);
await ddbClient.send(updateCommand);
当我打电话返回团队成员时(见下文),返回过时的数据:
const { data: teamMembers } = await team.members();
但是,当我调用观察查询时,会返回正确的数据:
client.models.Member.observeQuery({
authMode: "userPool",
}).subscribe({
next: ({ items, isSynced }) => {
console.log("Member.observeQuery: ", items, isSynced);
},
})
我已经搜索过这是否可能是缓存问题,但我没有找到与此相关的信息。
非常感谢任何帮助。
作为入职流程的一部分,对于我们正在开发的应用程序,我们尝试同时注册两个用户。 这是我们遇到问题的根本原因。 当我们更改流程以一次处理一个用户时,问题就解决了。 我希望它对其他人有帮助。