2015-03-15 6 views
0

Я пытаюсь проверить функциональность загрузки с помощью руководства this, за исключением использования cfs-s3. Это очень простой пример с простым кодом, но я получаю сообщение об ошибке на клиентской консоли. Error: Access denied. No allow validators set on restricted collection for method 'insert'. [403]Метеор: невозможно загрузить изображение на S3 с помощью CollectionFS

Я получаю эту ошибку, даже если я установил allow insert всеми возможными способами.

Вот мой код клиента:

// client/images.js 
var imageStore = new FS.Store.S3("images"); 

Images = new FS.Collection("images", { 
    stores: [imageStore], 
    filter: { 
     allow: { 
      contentTypes: ['image/*'] 
     } 
    } 
}); 

Images.deny({ 
insert: function(){ 
return false; 
}, 
update: function(){ 
return false; 
}, 
remove: function(){ 
return false; 
}, 
download: function(){ 
return false; 
} 
}); 

Images.allow({ 
insert: function(){ 
return true; 
}, 
update: function(){ 
return true; 
}, 
remove: function(){ 
return true; 
}, 
download: function(){ 
return true; 
} 
}); 

И есть простая кнопка ввода файла на главной странице -

// client/home.js 
'change .myFileInput': function(e, t) { 
    FS.Utility.eachFile(e, function(file) { 
     Images.insert(file, function (err, fileObj) { 
      if (err){ 
      console.log(err) // --- THIS is the error 
      } else { 
      // handle success depending what you need to do 

      console.log("fileObj id: " + fileObj._id) 
      //Meteor.users.update(userId, {$set: imagesURL}); 
      } 
     }); 
    }); 
} 

Я установил соответствующие политики и все на S3, но я не» t думаю, что эта ошибка связана с S3 вообще.

// server/images.js 
var imageStore = new FS.Store.S3("images", { 
    accessKeyId: "xxxx", 
    secretAccessKey: "xxxx", 
    bucket: "www.mybucket.com" 
}); 

Images = new FS.Collection("images", { 
    stores: [imageStore], 
    filter: { 
     allow: { 
      contentTypes: ['image/*'] 
     } 
    } 
}); 

Я также опубликовал и подписался на коллекции соответствующим образом. Я копался часами, но не могу понять, что происходит.

EDIT: Я только что прочитал insecure пакет и все, что теперь работает. Поэтому в основном проблема заключается в правилах allow/deny, но я на самом деле это делаю. Я не уверен, почему он не признает правила.

ответ

3

Вы должны определить правила FS_Collection allow/deny в коде только для седана. Это серверные правила, применяемые к базовому Mongo.Collection, который создается FS.Collection.

Лучший подход экспортировать ключи AWS как следующие переменные окружения: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, удалите accessKeyId и secretAccessKey варианты от FS.Store, а затем переместить конструктор FS.Collection вызовы работать как на клиенте и сервер. Удобство использования env vars указано на странице cfs:s3.

В дополнение к этому вы можете управлять именем ведра с помощью Meteor.settings.public, что удобно, если вы хотите использовать разные ковши на основе среды.

+0

См. Также раздел wiki на странице [Безопасность] (https://github.com/CollectionFS/Meteor-CollectionFS/wiki/Security) для получения дополнительной информации о конфигурации CollectionFS Security –

+0

Переместите свой код Images.allow() в сервер/images.js –

Смежные вопросы