【发布时间】:2021-07-04 01:00:14
【问题描述】:
我正在编写一个 firebase 数据库应用程序,它允许以每秒一个像素的速率通过 firebase 发送网络摄像头图像。然后在另一个网站上读取数据库,该网站将像素重新组合成图像。
数据库只是一个 x,y 位置和 r,g,b 值。
var db;
var dbname = 'webcam';
var data = {
x : 0,
y : 0,
r : 0,
g : 0,
b : 0
};
所以每次只有一个像素存储在数据库中。要将数据发送到数据库,我使用这个 javascript 函数:
function updateDB(x,y,r,g,b){
data.x = x;
data.y = y;
data.r = r;
data.g = g;
data.b = b;
if(db != null){ db.ref(dbname).set(data); }
}
数据库已经这样实例化了
function setupFirebase() {
var firebaseConfig = {
apiKey: "XXXXXXXXXXXXXXXXXX",
authDomain: "XXXXXXXX.firebaseapp.com",
projectId: "XXXXXXXXXX",
databaseURL: "https://XXXXXXXXXXXX-default-rtdb.europe-west1.firebasedatabase.app/",
storageBucket: "XXXXXXXXXXX.appspot.com",
messagingSenderId: "XXXXXXXXXXXXXXXXX",
appId: "XXXXXXXXXXXXXXXXXXXXXX"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
db = firebase.database();
}
数据库规则完全开放:
{
"rules": {
".read": "true",
".write": "true"
}
}
这是有效的——我可以使用这个 javascipt 函数从数据库中读取数据。数据被放入 webcam[][] 数组并在浏览器窗口中绘制到屏幕上。
db.ref(dbname).on("value", function gotdata(newdata) {
fbdata = newdata.val();
if (fbdata != null) {
//send data to the image grid
var x = fbdata.x;
var y = fbdata.y;
var r = fbdata.r;
var g = fbdata.g;
var b = fbdata.b;
//console.log("webcam data arrived = ", x, y, r, g, b);
webcam[x][y] = r;
webcam[x][y] = g;
webcam[x][y] = b;
}
});
这就是问题所在。我想添加身份验证,以便只有我可以从我的网络应用程序发送像素信息。我希望任何人都能够阅读图像,但只有我可以写图像。我在 Firebase 中使用电子邮件 + 密码身份验证生成了一个用户 ID,这给了我一个用户 ID,例如 =“12345678901234567890”。
在数据库规则中,我将规则设置为:
{
"rules": {
".read": "true",
".write": "auth.uid === '12345678901234567890'"
}
}
它只是按预期在浏览器中生成错误消息。
Uncaught (in promise) Error: PERMISSION_DENIED: Permission denied
at Repo.ts:751
at Ft (util.ts:539)
at Ki.callOnCompleteCallback (Repo.ts:741)
at Repo.ts:463
at PersistentConnection.ts:613
at Mi.onDataMessage_ (PersistentConnection.ts:648)
at xi.onDataMessage_ (Connection.ts:314)
at xi.onPrimaryMessageReceived_ (Connection.ts:306)
at Pi.onMessage (Connection.ts:203)
at Pi.appendFrame_ (WebSocketConnection.ts:275)
问题是在将像素发送到数据库的 javascript 应用程序中,我应该在哪里使用此用户 ID?如何让数据库知道我有一个有效的用户 ID?我是在 firebaseConfig() 中执行一次,还是每次发送一条像素数据时都需要发送?
我在 Firebase 参考中找不到这个简单事务的明确示例。
谢谢
【问题讨论】:
标签: javascript firebase-realtime-database firebase-security