小编des*_*tro的帖子

如何在Cognito Federated Identities中访问用户的电子邮件地址?

我正在尝试建立一个基本网站(AWS上无服务器),允许访问者使用Google和/或Facebook登录.目前我计划使用S3,Cognito with Federated Identities,API Gateway,Lambda(NodeJS)和DynamoDB.客户端应用程序将使用Angular.

我有谷歌和Facebook的社交登录工作,目前我在第一次登录时,在"用户"表中插入一行,其中包括cognitoId,名称,个人资料图片URL等.

我还认为以用他们的电子邮件地址作为密钥存储用户信息是一个很好的设计,而不是像cognitoId这样的东西,以便用户可以使用不同的提供商登录并查看相同的数据.所以我需要知道经过身份验证的用户的电子邮件地址,但我认为它应该来自Cognito,而不是直接来自用户(因为客户端应用程序不应该被信任).

我相信Cognito存储用户的电子邮件地址,因为我在用户池中根据需要启用了该字段.

我遇到的问题是我找不到任何有关如何从Cognito获取用户电子邮件地址的信息.

我最接近的是这篇文章,但我无法在任何地方找到访问令牌:如何使用cognito身份标识获取用户属性(用户名,电子邮件等)

这篇文章表明我可以使用GetUser,但我再次不知道AccessToken的来源:使用AWS cognito身份创建用户

如果我确实需要使用GetUser和AccessToken,它来自何处,以及如何生成它?它是来自客户端,还是我可以使用AWS.config.credentials在Lambda中获取它?

我一直试图弄清楚这一段时间,我觉得我错过了一些非常简单的东西!

federated-identity amazon-web-services aws-lambda aws-cognito

15
推荐指数
2
解决办法
3293
查看次数

如何在node.js AWS Lambda中获取经过身份验证的用户的电子邮件地址?

我有一个使用AWS javascript SDK的Angular应用程序,可以使用Facebook和Google成功登录.我能够创建Cognito身份,并在联合身份池中看到身份.我也可以使用我的IAM经过身份验证的API端点(我在Lambda中看到用户的cognitoId我正在调用).

我想使用用户的电子邮件地址作为数据库中的密钥(DynamoDB),因此我试图弄清楚如何从受信任的来源(Cognito(首选)或身份验证提供商的JWT)访问用户的电子邮件地址.

访问用户电子邮件地址的最佳方式是什么?

更新:在客户端(javascript)我使用联合身份与谷歌和Facebook令牌.社交登录正在运行,我可以使用Cognito进行身份验证,通过登录:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:****',
    Logins: {
      'accounts.google.com': authResult['id_token']
    }
});
Run Code Online (Sandbox Code Playgroud)

然后我做了AWS.config.credentials.get(),我可以得到类似的东西AWS.config.credentials.identityId,但我找不到accessToken或调用JWT的方法.我相信我需要打电话result.getAccessToken().getJwtToken(),但我找不到它.

他们获得accessToken的所有示例似乎都在使用.authenticateUser(authenticationDetails()),但详细信息包括用户名和密码(不是联合登录).

amazon-web-services aws-sdk aws-lambda aws-cognito

5
推荐指数
1
解决办法
2758
查看次数