我正在使用AWS Lambda,Cognito和API Gateway(与Serverless编排)为我的Web应用程序构建API。AWS Lambda - Cognito Identity ID使用相同的登录名更改
用户认证使用Cognito,然后使一个认证请求到API(图案从Serverless Stack教程,其中I抓住他们Cognito ID复制:
event.requestContext.identity.cognitoIdentityId
然后我抢相关联的用户记录与cognitoIdentityId
执行基于角色/权限的逻辑并返回相关数据
我一直在遇到的麻烦是,当不同的人(我正在使用其他开发者,目前)使用相同的凭据登录,但是fr om不同的计算机(以及在某些情况下的国家),cognitoIdentityId
与他们的请求发送完全不同 - 为同一用户userPool
用户记录!
注:我不与任何 “联合身份”(即,脸谱等)整合。这是简单的旧电子邮件登录。每个人都使用相同的信用卡,但有些人的请求来自不同的Cognito ID。
这是非常有问题的,因为我没有看到另一种方式来唯一标识与Cognito记录关联的数据库中的用户记录。
问题:我缺少的东西?有一个更好的方法吗?这是预期的行为?
的API是目前不实际上插入数据库。由于我们的数据结构仍然不稳定,应用程序远离现场,因此我创建了一个API,它像数据库一样集成了数据库并返回数据,但该数据只存储在JSON文件中。我会重现下面的一些相关代码,以防万一它是相关的。
一个例子拉姆达,用于获取当前用户:
export function getSelf(event, context, callback) {
const { cognitoID } = parser(event);
const requester = cognitoID && users.find(u => u.cognitoID === cognitoID);
try {
if (requester) {
return callback(null, success(prep(requester, 0)));
} else {
return authError(callback, `No user found with ID: ${cognitoID}`);
}
} catch (error) {
return uncaughtError(callback, error);
}
}
那解析器的东西往上顶只是一个实用程序来得到我想要的ID。
相关的用户记录可能是这样的:
{
cognitoID: 'us-west-2:605249a8-8fc1-40ed-bf89-23bc74ecc232',
id: 'some-slug',
email: '[email protected]',
firstName: 'John',
lastName: 'Jacob Jingleheimer Schmidt',
headshot: 'http://fillmurray.com/g/300/300',
role: 'admin'
},
你能否让我的身份池ID,用户池ID,用户名和其他开发商收到的身份ID? –
@RachitDhall - PMing似乎不是SO上的功能! https://meta.stackexchange.com/questions/431/any-way-to-send-a-personal-message-to-another-user - 我没有看到您的个人资料上的联系信息。如果您通过redshiftdigitalcom.com的sasha给我发电子邮件,我可以回复信息。谢谢! – Sasha