从 Amazon S3 JavaScript SDK 服务器返回的"Missing credentials in config"



我一直在遵循http://aws.amazon.com/developers/getting-started/browser/上的样板代码来获取CORS上传以与我的S3帐户一起工作。

我创建了一个Facebook应用程序,更改了S3存储桶的CORS配置XML,并在JavaScript代码中填充了适当的变量。但是当我尝试通过我的网页上传文件时,我得到Error: Missing credentials in config响应。

谁能给我指出正确的方向来调试这个?

我的JS:

var appId = '999943416325248';
var roleArn = 'arn:aws:iam::458182047307:role/s3-test';
var bucketName = 'my-bucket';
var fbUserId;
var bucket = new AWS.S3({
    params: {
        Bucket: bucketName
    }
});
var fileChooser = document.getElementById('video-file-input');
var button = document.getElementById('submit-button');
var results = document.getElementById('results');
button.addEventListener('click', function () {
    var file = fileChooser.files[0];
    if(file){
        results.innerHTML = '';
        //Object key will be facebook-USERID#/FILE_NAME
        var objKey = 'facebook-' + fbUserId + '/' + file.name;
        var params = {
            Key: objKey,
            ContentType: file.type,
            Body: file,
            ACL: 'public-read'
        };
        bucket.putObject(params, function (err, data) {
            if(err){
                results.innerHTML = 'ERROR: ' + err;
            }
            else{
                listObjs();
            }
        });
    }
    else{
        results.innerHTML = 'Nothing to upload.';
    }
}, false);
function listObjs() {
    var prefix = 'facebook-' + fbUserId;
    bucket.listObjects({
        Prefix: prefix
    }, function (err, data) {
        if(err){
            results.innerHTML = 'ERROR: ' + err;
        }
        else{
            var objKeys = "";
            data.Contents.forEach(function (obj) {
                objKeys += obj.Key + "<br>";
            });
            results.innerHTML = objKeys;
        }
    });
}
/*!
 * Login to your application using Facebook.
 * Uses the Facebook SDK for JavaScript available here:
 * https://developers.facebook.com/docs/javascript/gettingstarted/
 */
window.fbAsyncInit = function () {
    FB.init({
        appId: appId
    });
    FB.login(function (response) {
        bucket.config.credentials = new AWS.WebIdentityCredentials({
            ProviderId: 'graph.facebook.com',
            RoleArn: roleArn,
            WebIdentityToken: response.authResponse.accessToken
        });
        fbUserId = response.authResponse.userID;
        button.style.display = 'block';
    });
};
 // Load the Facebook SDK asynchronously
(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if(d.getElementById(id)){
        return;
    }
    js = d.createElement(s);
    js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

原来Chrome阻止了我的域名上的弹出窗口,所以Facebook的身份验证无法处理。一旦我允许从域弹出窗口,一切工作如预期

相关内容

最新更新