在移动应用中注册的帐户经过验证后,我希望Lambda函数能够接收用户ID。由于这个原因,我在API网关中创建了POST API。 "使用来电者凭证进行调用"已选中,并且身体映射模板已添加为
{ "identity": "$input.params('identity')" }
不幸的是,当我在API网关中测试它时,它会提供HTTP错误404-未找到错误。
print context.identity
结果为
<_main__.CognitoIdentity object at 0x7eg6f79v2bed2>
&安培;
print context.identity.cognito_identity_id
结果为
None
即便如此,当我尝试使用移动应用时,只有在我输入验证码后,屏幕上才会显示HTTP Error 404-Not Found警报。 我已将所有权限作为AWSLambdaFullAccess策略和AmazonAPIGatewayInvokeFullAccess策略授予Cognito(Auth和UnAuth)IAM角色。 如果您让我知道问题的解决方案,我将很高兴。
Lamda Error,API Gateway PUSH API Seetings,API Gateway PUSH API Method
答案 0 :(得分:1)
如果在该端点上使用COGNITO_USER_POOLS进行授权,则可以将“授权”标头设置为发布请求中的idToken。然后,API网关验证令牌并将其传递给函数。
然后在您的lambda函数中,您应该能够像这样访问Cognito用户对象。
const cognitoUser = event.requestContext.authorizer.claims;
我更喜欢@ Kannaiyan的回答,因为您不必再拨打电话来获取用户数据。
答案 1 :(得分:0)
如果您有经过身份验证的用户,则表示您具有传递给lambda的身份验证的访问令牌,
使用Access Token
,您可以获取用户信息及其属性。
var params = {
AccessToken: 'STRING_VALUE' /* required */
};
cognitoidentityserviceprovider.getUser(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
此代码在节点或javascript中很好。
如果您使用其他SDK,它将具有类似的签名。
希望它有所帮助。