我的大多数应用程序都在使用firebase.database(),而我只使用了admin,其中需要提升权限。我刚刚更新到Firebase 4.12.1,一旦我这样做,当我使用admin.database()时,我开始收到以下错误:
[2018-04-16T13:45:01.042Z] @ firebase / database:FIREBASE致命错误: 数据库初始化多次。请确保格式 数据库URL与每个database()调用匹配。
我发现如果删除在admin.database()之前发生的对firebase.database()的调用,我就不会再遇到问题了,但如果我转到后续用户firebase.database()的页面,则会发生该连接,我收到错误,因为连接已经存在。
这是一个错误,我做错了什么,或者我们不能在Firebase 4.10.0(我最后一个工作版本)之后的同一个节点应用程序中使用firebase.database()和admin.database()? / p>
app.js(截短的)
var config = {
apiKey: "XXXX",
authDomain: "XXXX",
databaseURL: "https://XXXX.firebaseio.com",
projectId: "XXXX",
storageBucket: "XXXX",
messagingSenderId: "XXXX"
};
firebase.initializeApp(config);
serviceAccount = require(path.join(__dirname, 'XXXXX.json'));
var database = firebase.database();
users.js
var express = require('express');
var router = express.Router();
var firebase = require("firebase");
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://XXXX.firebaseio.com"
});
/* GET users listing. */
router.get('/', function(req, res, next) {
var databaseRef = admin.database().ref('navigator/users');
var query = databaseRef.once('value').then(function(snapshot) {
var totalUsers = 0;
snapshot.forEach(function(element) {
if(element.child('locations').hasChild('branson')){
console.log(element.key);
console.log('');
totalUsers += 1;
}
});
res.send('totalUsers' + totalUsers);
});
});
module.exports = router;
答案 0 :(得分:0)
您应不在单个页面中使用Admin SDK和常规Firebase JavaScript SDK。实际上,Admin SDK适用于Node.js项目,而不是用于网页。
虽然在某些情况下可以在网页中使用Admin SDK,但我会认真考虑它。除非您确切知道所访问的内容,否则您可能会有人获取您的管理凭据并获得对项目的完全访问权限。至少,您希望在普通用户无法访问的地方托管使用Admin SDK的页面。
如果您继续在网页中使用Admin SDK,则应在从使用客户端SDK的页面转换到使用Admin SDK的页面时使用页面重新加载。这样每个页面只会加载一个或另一个,并且冲突不会出现。