如何使用Amplify React在Python的后期确认Lambda触发器中获取Cognito身份ID?

时间:2019-03-22 22:44:35

标签: python amazon-web-services amazon-cognito aws-amplify

我正在研究ReactJS项目,并使用Amplify进行注册/登录。在注册时,我在Python中有一个后确认lambda触发器,该触发器将用户信息(用户名,cognito ID等)存储在本地数据库中。我也想存储身份ID,但似乎在事件或上下文变量中找不到它。我可以在用户登录后通过在React中调用Auth.currentCredentials()来找到身份ID,但是我想在注册过程中获取此信息。

在此方面的任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:2)

是的,客户端应用程序可以通过 Auth.currentCredentials().identityId 获取身份 ID,但这并不安全,因为任何人都可以覆盖客户端应用程序中的任何代码,因此 - 如果您依赖客户端应用程序作为您的identityId 的真实来源 - 例如,任何人都可以将 identityId 设置为其他用户的身份,然后以他们的身份登录。

在后确认触发器 lambda 函数中获取身份 ID 的一种方法是调用托管在亚马逊 API 网关上的 API - 后确认 lambda 调用发送新确认用户凭证的 API,该 API 背后有一个 lambda,该 lambda 的代码可以访问与传入请求“req”相关联的变量中调用 API 的人的身份标识,即:

req.apiGateway.event.requestContext.identity.cognitoIdentityId

因此,在后确认 lambda 函数中获取 identityId 的一种安全方法是调用 API 并要求 API 返回该变量中的 identityId - 所有这些都在服务器上完成。

但是,请注意,当前存在一个未决问题,即后确认 lambda 未从 API 获得许可(403 错误) - 只有在您通过 Amplify 设置所有内容时才会发生这种情况,而不是手动设置。如果您使用 Amplify 设置所有 lambda 函数,则必须等待此问题得到解决:https://github.com/aws-amplify/amplify-cli/issues/6589,然后再尝试此处描述的策略以在后确认触发器 lambda 函数中获取 identityId。

答案 1 :(得分:0)

我遇到了同样的问题,并且发现它确实在auth触发器中不可用,因为用户必须进行身份验证才能检索它,如您所说。 (我可以找到)也没有办法使用AWS admin SDK来获取此信息。

在用户登录到应用程序后,我进行了一次小检查,并进行了调用以将identityId保存在需要的地方。目的是允许其他用户在登录后通过使用用户自己的identityId和mplify提取个人资料图片来访问用户的媒体。

希望这会有所帮助。

答案 2 :(得分:-1)

您可以将identityId保存在自定义属性中