在浏览器(javascript)中使用AWS的Cognito凭据时,请不断收到“缺少凭据”错误

时间:2014-12-16 07:30:10

标签: javascript amazon-web-services amazon-s3 amazon-cognito aws-sdk

我尝试使用AWS'从网络浏览器上传文件到我的S3存储桶。 JavaScript SDK。我的代码如下所示:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    AccountId: 'dfhgdh',
    IdentityPoolId: 'fdagsd',
    RoleArn: 'fdafds'
});

var bucket = new AWS.S3({params: {Bucket: 'test-bucket'}});
var pdfUpload = document.getElementById('pdf-uploads').files[0];

var params = {Key: pdfUpload.name, ContentType: pdfUpload.type, Body: pdfUpload};
bucket.putObject(params, function (error, data) {
    if (error) {
        console.log(error);
    } else {
        console.log(data);
    }
});

但是,每当它到达putObject命令时,我都会从AWS收到错误:

"错误:配置中缺少凭据{消息:"缺少配置中的凭据",代码:"凭据错误" ..."

我确定我在这里遗漏了一些简单而愚蠢的东西,但我无法弄清楚我的生活。 (当我尝试对伪秘密密钥进行硬编码时,我得到了一个不同的错误,所以我很确定它与我尝试设置认证凭证的方式有关。)< / p>

2 个答案:

答案 0 :(得分:9)

事实证明,在调试JavaScript AWS SDK之后,问题是我在设置凭据之前没有设置区域......出于某种原因,我还需要使用update方法。我认为这似乎是SDK的一个错误,但AWS.config的以下设置解决了我的问题:

AWS.config.region = 'us-east-1';
AWS.config.update({
    credentials: new AWS.CognitoIdentityCredentials({
        AccountId: '43243243243',
        RoleArn: 'arn:aws:iam::970123460807:role/Cognito_RigUpWebUnauth_DefaultRole',
        IdentityPoolId: 'us-east-1:432432-432432432-4324323423-423243'
    })
});

答案 1 :(得分:7)

配置凭证对象后,您需要拨打电话refresh()来获取这些凭据。然后,您可以将回调中的S3调用到回调中。

AWS.config.credentials = new AWS.CognitoIdentityCredentials({...});

AWS.config.credentials.refresh(function(){
   // Your S3 code here...
});