切换页面后,无法访问实时数据库

时间:2020-05-30 03:35:08

标签: javascript firebase firebase-realtime-database

使用Firebase用户身份验证写入数据库时​​,我会遇到一些问题。

在给定页面中,说出myPage.html;我需要访问实时数据库以执行一些数据写入。我有代码可以检查我是否正确登录:

  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      // User is signed in.
      ... some useful code ...
      // OK to perform DB writes.
    } else {
      // User is signed out.
      ... Get-Out-Of-Here ...
      // NG to perform DB writes.
    }
  });

到目前为止,一切正常,如果我已登录,则可以按预期方式写入数据库。

然后,我需要从另一页(myOtherPage.html)进行更多写作。

myPage.html中有一个指向myOtherPage.html的链接。

<a href='myOtherPage.html'>Go To The Other Page</a>

问题来了:

在myOtherPage.html中,我无法再执行任何数据写入数据库的操作。

我的身份验证似乎已经消失了。

即使更改页面,我该怎么做才能保持对数据库的访问?

1 个答案:

答案 0 :(得分:2)

如果您不使用Authentication State Persistence可以阅读here

,则可能是问题

官方文档中的一些代码段:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
  .then(function() {
    // Existing and future Auth states are now persisted in the current
    // session only. Closing the window would clear any existing state even
    // if a user forgets to sign out.
    // ...
    // New sign-in will be persisted with session persistence.
    return firebase.auth().signInWithEmailAndPassword(email, password);
  })
  .catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
  });

这是可用的状态类型:

states availabe

使用“本地”状态应该可以满足您的需要,并且用户需要注销自己,这意味着他将保持登录状态,除非他注销即可访问您的数据库。

PS: Web浏览器和React Native应用程序的默认设置是本地的(前提是浏览器支持此存储机制,例如,启用了第三方Cookie /数据),而Node.js后端应用程序则没有。 / em>