我创建了一个Web应用程序,该应用程序显示我的Cloud Firestore中的数据。我准备将其发布给公众,但是我不希望任何人都能读/写我的数据库。 我目前已将我的API密钥限制为仅允许来自我的网站url的请求,但它似乎没有任何作用。我什至从应用程序中完全删除了它,它仍然可以访问数据库。
我是否需要在Firestore中设置规则以使其需要API密钥?我在Google上搜索了很多东西,但我能找到的只是关于为什么可以公开公开您的密钥的文章。
答案 0 :(得分:2)
不可能基于某些纯文本API密钥或网站域来限制对Firestore的访问。如果您发布的应用程序提供对Cloud Firestore(或Cloud Storage或实时数据库)的直接访问,则保护它的唯一方法是结合使用Firebase Authentication和security rules。通过安全规则,您可以表达谁可以读写哪些集合和文档。
如果您不使用Firebase身份验证,并且您的默认安全规则允许进行通用的读/写访问,那么具有Internet连接的任何人都可以读写每个文档。
答案 1 :(得分:1)
Doug's excellent answer的一个细微变化是允许所有用户写入预先存在且无法猜测名称的特定文档。这些文档名称实际上就变成了您自己的API密钥,您可以与应用程序的用户共享(带外)。
此安全规则可以很简单:
selectCategoria(){
let me=this
var url= '/admin/selectCategoria'
axios.get(url)
.then(function (response) {
var respuesta= response.data
console.log(respuesta)
me.nodes = respuesta.categorias
})
.catch(function (error) {
toastr.error(error.response.data.message)
});
}
因此:任何人都可以获取/更新他们知道名称的任何现有文档,但是他们无法创建文档,也无法获取所有文档的列表。
这避免了使用Firebase身份验证的需要。另一方面,这意味着您不能基于每个用户锁定访问权限。现在,以某种方式可以访问文档名称的任何用户都可以随意读取/写入它。