有没有一种方法可以使用最初在用户创建时设置的规则来检查值?
我细读了Firebase文档,但无济于事。
调用函数createUserWithEmailAndPassword
时,我将在数据库中创建一些值,例如:
"users": {
"ht35resf435dwe3rfdw": {
"is_premium": false,
"display_name" "John",
"last_login": 15353723826
}
}
我面临的问题是:is_premium: false
是前端代码的一部分,我担心用户会以某种方式将其更改为is_premium: true
。
我想不出一种方法来检查它在创建时最初设置为false。
P.s我可能会犯错,我是一名初中生,所以我很感谢所有指针。
答案 0 :(得分:1)
要仅允许将值设置为false
,可以使用验证规则:
{
"rules": {
"users": {
"$uid": {
"is_premium": {
".validate": "newData.isBoolean() && newData.val() == false"
}
}
}
}
}
以上内容仅允许false
由任何客户端编写。但是,当您使用Admin SDK进行写操作时,这些写操作会绕过这些安全规则。因此,您可以使用Admin SDK标记高级用户。
答案 1 :(得分:0)
我刚开始使用Firebase,所以我无法提供太多信息。如果您想开始学习它,可以看个很棒的series。另外,我建议使用Cloud Firestore代替实时数据库,因为阶梯较旧且功能较少。更改数据库上的安全规则将使您无所事事,用户可以编辑数据。您需要做的是将premium默认设置为false甚至在数据库中不存在,然后创建一个javascript函数以在数据库中创建或将其更改为true。
编辑:
Ajith Naruto可以工作,但也不允许所有从Web应用程序写入数据库。
编辑2:
弗兰克·范·普菲伦(Frank van Puffelen)的工作应该奏效,我不会回答他的问题。
答案 2 :(得分:0)
您可以按照以下方式更改安全规则,以使用户无法进行更改。
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}