Javascript 使用web上的多个firebase实时数据库进行身份验证不起作用

Javascript 使用web上的多个firebase实时数据库进行身份验证不起作用,javascript,firebase,firebase-realtime-database,firebase-authentication,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,我有两个Firebase实时数据库。我已经成功地从基于web的客户端连接、读取和写入了这两个文件。但是,我将回顾我的安全规则,并将其设置为只有使用 "rules": { ".read": "auth.uid != null" , ".write": "auth.uid != null" } 但是,由于某种原因,我现在无法连接到数据库,它说权限被拒绝。我在客户端使用Google进行了身份验证,其他所有使用auth的功能都如期工作。例如,我能够打印出用户的uid和所有内容

我有两个Firebase实时数据库。我已经成功地从基于web的客户端连接、读取和写入了这两个文件。但是,我将回顾我的安全规则,并将其设置为只有使用

  "rules": {
    ".read": "auth.uid != null" ,
    ".write": "auth.uid != null" 
  }
但是,由于某种原因,我现在无法连接到数据库,它说权限被拒绝。我在客户端使用Google进行了身份验证,其他所有使用auth的功能都如期工作。例如,我能够打印出用户的uid和所有内容。这是我的客户端代码(经过审查)

错误:

Error: permission_denied at /boards/id: Client doesn't have permission to access the desired data.
    at util.ts:526
    at onComplete (SyncTree.ts:651)
    at Object.onComplete (Repo.ts:167)
    at PersistentConnection.ts:247
    at si.onDataMessage_ (PersistentConnection.ts:554)
    at ei.onDataMessage_ (Connection.ts:317)
    at ei.onPrimaryMessageReceived_ (Connection.ts:309)
    at $r.onMessage (Connection.ts:205)
    at $r.appendFrame_ (WebSocketConnection.ts:273)
    at $r.handleIncomingFrame (WebSocketConnection.ts:326)
这些是我正在使用的firebase脚本

<script src="/__/firebase/7.6.1/firebase-app.js"></script>
<script src="/__/firebase/7.6.1/firebase-database.js"></script>
<script src="/__/firebase/7.8.1/firebase-auth.js"></script>
<script src="/__/firebase/init.js"></script>


这是已知的bug吗?我错过什么了吗?谢谢。

重新加载页面时,Firebase身份验证将恢复用户的身份验证状态。这需要对服务器进行异步调用。连接侦听器时,很可能身份验证检查尚未完成

要解决此问题,请始终在以下位置附加需要身份验证的侦听器:


如果您再次遇到类似问题,我建议记录活动用户的UID以帮助进行故障排除:

console.log(firebase.auth().currentUser ? firebase.auth().currentUser.uid : "No user");
firebase.database(app).ref('boards').child(boardID).once('value', function(snapshot) {//I do stuff here})

这通常会立即说明为什么安全规则拒绝您的写入。

我通过从

<script src="/__/firebase/7.6.1/firebase-app.js"></script>
<script src="/__/firebase/7.6.1/firebase-database.js"></script>
<script src="/__/firebase/7.8.1/firebase-auth.js"></script>
<script src="/__/firebase/init.js"></script>


var-app=firebase.initializeApp(firebaseConfig,'app2')中删除
,'app2)


这使得第二个数据库成为默认数据库,现在一切正常。但是,如果客户机上同时需要两个数据库引用,这将再次成为一个问题,据我所知,除非Firebase开发人员发布补丁,否则无法修复此问题。

我仍然收到一个权限拒绝错误。我将读取请求放在authsstatechanged侦听器中,并打印出uid和用户的其余信息,确保所有信息都在那里。我还玩了一些规则,所以现在你只能在没有经过身份验证的情况下阅读,而且它是有效的。因此,由于某些原因,uid没有与读取请求一起发送。我应该在firebaseConfig中更改一些内容吗?这是非常罕见的。你认为你可以在jsbin这样的网站上设置一个复制品,这样我就可以看一看了吗?很抱歉代码太乱了。我一直在忙着修复这个错误。但代码是这样的。当我加载该小提琴时,它显示在JavaScript控制台中未定义
firebase
。我们的想法是,您可以在我可以查看的网站上重现
权限被拒绝的问题,这是帮助您解决看似异常情况的最快方法。通过创建第二个数据库并在相同安全规则下尝试读取,可以轻松重现此问题。我不允许分享关于数据库的任何信息,包括泄露已填充的firebaseConfig JSON。我设法解决了我自己的问题,我已经在上面发布了,但如果可能的话(因为我看到你在Firebase工作),请一定调查一下。谢谢你的帮助!
console.log(firebase.auth().currentUser ? firebase.auth().currentUser.uid : "No user");
firebase.database(app).ref('boards').child(boardID).once('value', function(snapshot) {//I do stuff here})
<script src="/__/firebase/7.6.1/firebase-app.js"></script>
<script src="/__/firebase/7.6.1/firebase-database.js"></script>
<script src="/__/firebase/7.8.1/firebase-auth.js"></script>
<script src="/__/firebase/init.js"></script>
  <script src="https://code.jquery.com/jquery-latest.min.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.9.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.9.0/firebase-database.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.9.0/firebase-auth.js"></script>