我建了一个MEAN stack应用,用户可以上传图片。目前,我将图片的URL存储在mongodb中,而图片本身则存储在指定文件夹的文件系统中。我读到,为了扩展性,最好将这些图片存储在AWS或firebase等地方,所以我决定选择AWS。
我创建了一个bucket,并且可以通过multer上传图片很好。
我如何让用户只有在登录到我的应用时才能检索他们的图片?前台和后台的认证已经完成了,但我不知道如何使用这个与访问s3 bucket并只获取用户特定的图片。
我可以将桶公开,并轻松建立URL,但这意味着每个人(无论他们是否登录到我的应用程序)都可以访问它们,这不是我想要的。
如果你能把你的用户认证为 亚马逊Cognito 用户,然后在登录过程中他们将承担一个角色。
如果该角色为S3附加了一个策略,你可以使用 ${cognito-identity.amazonaws.com:sub}
变量。通过构建你的S3 bucket,使用包含这个变量的key路径,你可以开发一个策略,只授予对该用户id前缀的key的访问。
请看一下 此处 S3策略的例子。