gpt4 book ai didi

javascript - Firebase 安全规则不起作用

转载 作者:行者123 更新时间:2023-11-28 17:49:52 25 4
gpt4 key购买 nike

我在 Web 应用程序中使用 Firebase 身份验证,并使用电话号码身份验证作为登录应用程序的选项。

function saveUser(fname) {
var user = firebase.auth().currentUser;
var newUserRef = firebase.database().ref('users/' + user.uid);
newUserRef.set({
fname: fname
});
}

根据以下数据库规则:

{
"rules" : {
".read" : false,
".write" : false,
// only authenticated users can write
"users": {
".read": "auth != null",
"$user_id": {
"fname": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.isString() && newData.val().matches(/^[A-Z]{3,}$/)"
},
}
}
}
}

但是,我不断收到错误:

FIREBASE WARNING: set at /users/ypGXpJRM1wdMOuOMf8F7quLnJ073 failed: permission_denied

有没有办法在不改变规则的情况下避免这个错误?

最佳答案

规则允许写入的第一个级别位于 /users/$uid/fname 中。但您的代码尝试写入 /users/$uid。由于您没有写入权限,因此数据库拒绝写入操作。

您有两个选项可以解决此问题:允许写入 /users/$uid,或写入 /users/$uid/fname

允许写入/users/$uid

要允许写入 /users/$uid,请将规则更改为:

"users": {
".read": "auth != null",
"$user_id": {
".write": "auth != null",
"fname": {
".read": "auth != null",

事实上,您可能希望确保用户只能编写自己的节点,您可以这样做:

"users": {
".read": "auth != null",
"$user_id": {
".write": "auth.uid === $uid",
"fname": {
".read": "auth != null",

写入/users/$uid/fname

您当前的写入代码尝试写入您没有权限的位置。由于您只写入 fname,因此您还可以写入该特定位置来消除错误:

var newUserRef = firebase.database().ref('users/' + user.uid);
newUserRef.child('fname').set(fname);

考虑到数据结构,我可能会去修改安全规则。

关于javascript - Firebase 安全规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com