【问题标题】:Firebase RealTime database rules to restrict on user id runs in simulator but not in AngularFireFirebase RealTime 数据库规则限制用户 ID 在模拟器中运行,但不在 AngularFire 中
【发布时间】: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


【解决方案1】:

所以这似乎是getRedirectResults() 的问题

进一步测试发现此代码有效(使用规则userId === auth.id):

this.angularFireAuth.onAuthStateChanged(user => {
  firebase
    .database()
    .ref('users')
    .child(user.uid)
    .child('email')
    .set('test@test.com');
});

但事实并非如此,因为用户始终为空:

  this.angularFireAuth.getRedirectResult().then(credential => {
    firebase
      .database()
      .ref('users')
      .child(credential.user.uid)
      .child('email')
      .set('test@test.com');
  });

这仍然不能解释为什么有时auth.uid != null 有效。

但似乎我不是唯一一个在getRedirectResults() 上拥有空用户的人,正如您所看到的here 并且有一个官方错误报告here

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-10-18
    • 2020-05-26
    相关资源
    最近更新 更多