在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主机,但这没有什么区别。