2017-02-17 66 views
0

我使用下面的代码使用Amazon Cognito注册用户。然后,我想在用户注册时将文件上传到Amazon S3 Bucket。使用Amazon Cognito上传到Amazon S3登录

一旦用户注册,我需要做些什么来配置桶准备上传? 谢谢

var roleArn = 'arn:aws:iam::123456:role/Cognito_Auth_Role'; 
    var bucketName = 'MY_BUCKET'; 
    AWS.config.region = 'eu-west-1'; 
     var poolData = { 
      UserPoolId : 'POOL_ID', // your user pool id here 
      ClientId : 'CLIENT_ID' // your app client id here 
     }; 
     var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 
     var userData = { 
      Username : 'username', // your username here 
      Pool : userPool 
     }; 
     var attributeList = []; 
     var password 
     //Create Bucket 
     var bucket = new AWS.S3({ 
     params: { 
      Bucket: bucketName 
     } 
    }); 

var dataEmail = { 
    Name : 'email', 
    Value : '[email protected]' // your email here 
}; 
var dataPhoneNumber = { 
    Name : 'phone_number', 
    Value : '+1234567890' // your phone number here with +country code and no delimiters in front 
}; 

...

var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); 
var attributePhoneNumber = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber); 
attributeList.push(attributeEmail); 
attributeList.push(attributePhoneNumber); 
var cognitoUser; 
userPool.signUp('username', 'password', attributeList, null, function(err, result){ 
    if (err) { 
     alert(err); 
     return; 
    } 
    cognitoUser = result.user; 
    console.log('user name is ' + cognitoUser.getUsername()); 

}); 

回答

2

您需要创建在Cognito联合身份标识池。让您的用户池成为特定身份池的身份提供者以获得身份验证身份。

上述注册用户与您的代码后,你就需要用下面的代码,以确认他,登录并获得AWS凭据(用自己的信息替换占位符):

var cognitoUser = userPool.getCurrentUser(); 

if (cognitoUser != null) { 
    cognitoUser.getSession(function(err, result) { 
     if (result) { 
      console.log('You are now logged in.'); 

      // Add the User's Id Token to the Cognito credentials login map. 
      AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
       IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', 
       Logins: { 
        'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() 
       } 
      }); 
     } 
    }); 
} 
//call refresh method in order to authenticate user and get new temp credentials 
AWS.config.credentials.refresh((error) => { 
    if (error) { 
     console.error(error); 
    } else { 
     console.log('Successfully logged!'); 
    } 
    }); 

在那么您将获得AWS凭证,您可以使用主要的AWS SDK for JavaScript(s3客户端)将文件上载到S3。

+0

你好。我收到来自Chrome控制台的此错误:未捕获的错误:无法读取属性'刷新'null –

+0

感谢百万人,拯救了我的一天!试图使用cognito将图像上传到S3时感到非常沮丧,然后遇到了您的代码......谢谢。 –

+0

我说得太快了!事实证明,它使用Unauthenticated身份登录,只要我禁用,我得到一个NotAuthorizedException异常! –