在Meteor中正确启用filepicker.io的安全性

Filepicker默认允许几乎每个人都可以将文件添加到您的S3存储桶中,这个存储组足够聪明,可以将您的API密钥从客户端代码中复制出来,幸运的是,还提供了一个安全选项,其中包含过期的策略。

但我不知道如何在Meteor.js中实现这一点。 试着来回安装meteor-crypto-base软件包,试图在服务器上生成哈希,在https://github.com/RGBboy/urlsafe-base64上试用了RGBboy的urlsafe-base64algorithm。 但是我只是没有进一步的了解。 也许有人可以帮忙! 先谢谢你。

这是一个如何在meteor中执行filepicker签名URL的例子, 这里的文档基于:

var crypto = Npm.require('crypto'); var FILEPICKER_KEY = 'Z3IYZSH2UJA7VN3QYFVSVCF7PI'; var BASE_URL = 'https://www.filepicker.io/api/file'; Meteor.methods({ signedUrl: function(handle) { var expiry = Math.floor(new Date().getTime() / 1000 + 60 * 60); var policy = new Buffer(JSON.stringify({ handle: handle, expiry: expiry })).toString('base64'); var signature = crypto .createHmac('sha256', FILEPICKER_KEY) .update(policy) .digest('hex'); return BASE_URL + "/" + handle + "?signature=" + signature + "&policy=" + policy; } }); 

请注意,这将需要存在于您的server目录内的某个地方,所以您不会将密钥运送到客户端。 为了certificate它的工作原理,在客户端可以这样调用它:

 Meteor.call('signedUrl', 'KW9EJhYtS6y48Whm2S6D', function(err, url){console.log(url)}); 

如果一切正常,当您访问返回的url时,您应该会看到一张照片。