因此,从本质上讲,我正在尝试设置注册,用户需要特殊的密钥才能进行注册和注册。根据我的研究,firebase没有任何内置工具可以完成此任务。
这是我的解决方案。实际上,我有一个称为secret的集合,然后在其中具有不同的文档,其中文档的id是关键。此集合的安全规则为:允许读取:true,允许写入:false。
现在基本上是当用户在填写包含电子邮件,密码和密钥的表单后按下注册。该功能运行
const handleSignUp = useCallback(async event => {
event.preventDefault();
const {email, password, secretkey} = event.target.elements;
const usersRef = db.collection('secret').doc(secretkey.value)
usersRef.get()
.then(async (docSnapshot) => {
if (docSnapshot.exists) {
//console.log("true", docSnapshot.data())
try {
const re = await app
.auth()
.createUserWithEmailAndPassword(email.value, password.value);
} catch (error) {
alert(error);
}
} else {
alert("Please enter a valid secret Key, or contact help@company.com for further assistance")
}
});
});
这是我的问题。机密集合的安全性如何,尤其是因为读取权限设置为true。我的假设是它是安全的,因为我的应用已设置为只能在我的域上运行。因此,即使有人拥有firebase配置键,他们也无法读取机密集合数据。我说的对吗?
答案 0 :(得分:2)
如果您允许所有读取,则用户可以对整个集合执行get()
以获取所有文档的列表。他们可以使用它来读取所有文档以及其中的秘密值。
我知道保护这一点的唯一方法是:
使实际机密值成为文档的ID。
允许get
访问文档,但不允许list
进入集合。
如果您从未这样做过:read
是list
+ get
的简写。请参阅granular operations上的文档。
答案 1 :(得分:0)
没有security rules来确定which authenticated users can read the data in the database,任何人都将能够读取数据,并且这是绝对不安全的。
如果您不使用Firebase身份验证,那么就不可能编写安全规则来限制仅从您的应用程序对集合的访问。