我已成功为未经授权的用户实施了AWS Cognito,如下所示。对于未经授权的用户,一旦成功返回IdentityId,我就可以使用Cognito Sync成功创建和操作数据集。我无法将Cognito Sync与授权用户一起使用。请有人告诉我如何获得授权用户的IdentityId,然后允许我listRecords(需要IdentityId)。 IdentityId始终以未定义的形式返回。
AWS.config.credentials = new CognitoIdentityCredentials({
IdentityPoolId: REACT_APP_AWS_CONFIG_IDENTITY_POOL_ID,
});
const userPool = new CognitoUserPool({
UserPoolId: REACT_APP_AWS_CONFIG_USER_POOL_ID,
ClientId: REACT_APP_AWS_CONFIG_CLIENT_ID,
});
let cognitosync = new AWS.CognitoSync();
AWS.config.credentials.get(()=>{
IdentityId = AWS.config.credentials.identityId;
listRecords();
});
function listRecords(){
cognitosync.listRecords({
DatasetName : DATA_SET_NAME,
IdentityId : IdentityId,
IdentityPoolId : REACT_APP_AWS_CONFIG_IDENTITY_POOL_ID
}, function(error, data) {
//...
});
}
提前致谢
答案 0 :(得分:0)
我怀疑您只需要为Logins
对象添加AWS.config.credentials
地图,以供经过身份验证的用户使用。
您在Logins
地图中放置的内容取决于用户的身份验证方式,但实际上您需要一个条目,身份提供商(IDP)作为密钥,并且您从该IDP收到的ID令牌为价值。
例如,如果您的用户通过Google进行身份验证,您可能会:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
Logins: {
'accounts.google.com': googleUser.tokenId
}
});
其中googleUser
是Google返回的对象。
如果您的用户使用Cognito用户池进行身份验证,您可能会:
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx':
session.getIdToken().getJwtToken()
}
});
将session
传递给您提供给CognitoUser.getSession()
的回调。此用例in this Gist的其他代码上下文。
答案 1 :(得分:0)
我发现了我的问题。获取我正在使用的Login
键/值的JWT:
result.getAccessToken().getJwtToken()
应该是什么时候:
result.getIdToken().getJwtToken()
现在都在工作