Firebase:具有完全权限的经过身份验证的用户在root上获得PERMISSION DENIED

时间:2017-06-04 20:11:36

标签: reactjs firebase firebase-realtime-database firebase-authentication firebase-security

在Firebase控制台中设置规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

在Chrome控制台中运行:

> firebase.database().ref().set('foo');

Firebase控制台的数据库标签现在反映了foo

在Firebase控制台中设置规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

在Chrome控制台中运行:

> firebase.auth().signInAnonymously()
< A {W: 1, sa: undefined, u: null, oa: null, fb: nul…}
> firebase.database().ref().set('bar');
Uncaught (in promise) Error: PERMISSION_DENIED: Permission denied

Firebase设置为允许匿名用户和Google用户,当我尝试读取或写入时,这两个用户都会被拒绝。

修改

我在这里添加了一个示例项目:

https://github.com/formido/react-firebaseui-web-stackoverflow-question

如果我将规则设置为:

{
  "rules": {
    ".read": "auth != null",
    "44358340": { ".write": true }
  }
}

...并登录,控制台将打印Timestamp written

如果我将规则设置为:

{
  "rules": {
    ".read": "auth != null",
    "44358340": { ".write": "auth != null" }
  }
}

...并登录,控制台将打印PERMISSION DENIED。

我所知道的代码中最相关的部分是:

  componentDidMount() {
    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        const ref = firebase.database().ref("/44358340");
        if (user) {
          const timestamp = firebase.database.ServerValue.TIMESTAMP;
          ref.set(timestamp).then((error) => {
            if (error) {
              console.error(error);
            }
            else {
              console.log('Timestamp written');
            }
          });
        }
      }
      this.setState({loading: false, user});
    });
  }

它托管在亚马逊服务器上。我想也许我必须将AUTH_DOMAIN设置为AWS主机,但这没有什么区别。

1 个答案:

答案 0 :(得分:0)

这是一个错误。请参阅discussion starting here

Fix here并将其部署在Firebase 4.1.2