使用 Amazon Cognito 登录上传到 Amazon S3

Tom*_*mer 0 javascript amazon-s3 amazon-web-services amazon-cognito

我正在使用下面的代码为用户注册 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@me.com' // your email here
};
var dataPhoneNumber = {
    Name : 'phone_number',
    Value : '+1234567890' // your phone number here with +country code and no delimiters in front
};
Run Code Online (Sandbox Code Playgroud)

...

    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());

});
Run Code Online (Sandbox Code Playgroud)

Ion*_*ian 5

您需要在 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!');
    }
    });
Run Code Online (Sandbox Code Playgroud)

在该代码块的末尾,您将获得 AWS 凭证,您可以将这些凭证与用于 javascript 的主要 AWS 开发工具包(s3 客户端)一起使用以将文件上传到 S3。