【发布时间】:2020-05-26 22:48:32
【问题描述】:
如果您查看屏幕截图,您可以看到模拟测试通过:
如果uid不匹配,它会限制将用户数据添加到用户节点。
可以看到位置是:
/users/6OCBYNh3CTammMWrCjX0F003zab2
换句话说:
/users/$uid
当我尝试从代码中执行此操作时,出现权限被拒绝错误:
private async addNewUserToFirebase(user: firebase.User): Promise<void> {
console.log('adding user to Firebase', user);
try {
const ref = this.db.list('/users');
await ref.update(user.uid, {email: 'test@test.com'});
} catch (error) {
console.error('Unable to add user to firebase db', error);
}
}
@firebase/database:FIREBASE 警告:更新时间为 /users/6OCBYNh3CTammMWrCjX0F003zab2 失败:permission_denied
但是,如果我将规则更改为简单的
".write": "auth != null"
然后就可以了。那么为什么我尝试匹配 uid 时会失败?
注意
我也试过了:
const refAccount = this.db.list('/users');
await refAccount.update(`/${user.uid}`, {email: "test@test.com");
并得到同样的错误。
我已经尝试过模拟器和代码中的多个用户。结果是一致的。
然而this question 显示相同的规则,并且对于该 OP 它有效。
【问题讨论】:
-
我有点怀疑这是 AngularFire 的问题。你可以试试
firebase.database().ref("users").chikd(firebase.auth().currentUser.uid).child("email").set("test@test.com")看看是否有效? -
@FrankvanPuffelen 感谢您的建议,但这给出了同样的错误,所以它不是 AngularFire。
标签: javascript firebase firebase-realtime-database firebase-security angularfire2