我每周都会从Firebase收到这封烦人的电子邮件:
[Firebase]您的实时数据库*****具有不安全的规则
我想使这封电子邮件静音。
有这样的答案引用用户: Firebase email saying my realtime database has insecure rules
我的应用没有任何用户,也没有使用Firebase /身份验证。
我如何编写规则以使该电子邮件消失?
我在Firebase Web控制台上的数据库规则现在看起来像这样:
{
"rules": {
".read": true,
".write": true
}
}
我的firebase.json:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
我的fire.js:
import firebase from 'firebase/app';
import 'firebase/database';
import 'firebase/storage';
const config = {
apiKey: <API_KEY>,
authDomain: <AUTH_DOMAIN>,
databaseURL: <DATABASE_URL>,
projectId: <PROJECT_ID>,
storageBucket: <STORAGE_BUCKET>,
messagingSenderId: <YADA_YADA>,
};
const fire = firebase.initializeApp(config);
export default fire;
答案 0 :(得分:2)
您的规则现在的方式是,世界上任何人都可以读写数据库的内容。对于您来说,这是一个安全问题,也可能是帐单问题,因为有人可以填满您的数据库,而您需要为此付费。
如果您的应用没有任何用户并且不使用auth,这听起来像您是从您控制的后端服务中使用它的。如果您仅使用admin SDK来读写数据库,则可以像这样将其锁定:
{
"rules": {
".read": false,
".write": false
}
}
admin SDK对数据库具有完全访问权限,并且会忽略所有规则,因此这不会影响使用该数据库的任何代码。
答案 1 :(得分:0)
我找到了解决方法。
在Firebase Web身份验证控制台中使用一些电子邮件和密码创建一个用户。
现在您fire.js
中添加此内容:
firebase.auth().signInWithEmailAndPassword(<USERNAME>, <PASSWORD>).catch((error) => {
console.log(error.code);
console.log(error.message);
});
firebase.auth().onAuthStateChanged((user) => {
if (user) {
// User is signed in.
console.log("IF YOU DON'T GET HERE SOMETHING IS WRONG");
} else {
// User is signed out.
console.log("IF YOU GET HERE SOMETHING IS WRONG");
}
});
然后在您的Firebase数据库规则控制台中粘贴以下内容:
{
"rules": {
"<RESOURCE1>": {
".read": "auth != null",
".write": "auth != null"
},
"<RESOURCE2>": {
".read": "auth != null",
".write": "auth != null"
},
"<RESOURCE3>": {
".read": "auth != null",
".write": "auth != null"
},
"<RESOURCE4>": {
".read": "auth != null",
".write": "auth != null"
}
}
}
现在,电子邮件警告将消失。