Firebase Authenticatoin - onauthstatechange被多次调用

Firebase Authenticatoin - onAuthStateChanged called multiple times

本文关键字:调用 onauthstatechange Authenticatoin Firebase      更新时间:2023-09-26

每当我渲染主页或帐户页面时,我的会话有时会丢失。我有一个叫做isSignedIn()的函数,它检查uid是否存在。有时,当我刷新主页时,它返回false。当我击中我的帐户端点时,它也返回false,即使它在上一页上是真的。你知道为什么会这样吗?

我的应用程序如何工作:当用户登录时,我从客户端获取uid并命中认证端点。

function createServerSession(user) {
    // Get secret token from Firebase for current session
  firebase.auth().currentUser.getToken(true)
    .then(function(idToken) {
   // Get session on my Node server for server user identification
  if (idToken) {
    fetch('/firebaseauth?idtoken=' + encodeURIComponent(idToken) + '&username=' + encodeURIComponent(user.email.split('@')[0]), {
      credentials:'include'
    }).then(function(data){
      if (window.location.pathname === '/' && document.getElementById('login').innerHTML.trim() === 'Join') {
        redirect('/');
      }
      if (window.location.href.includes('login')) {
        redirect('/');
      }
    })
  }
})
}

然后它击中我的node.js代码来存储会话:

app.get('/firebaseauth', function (req, res) {
if (! req.session.idToken) {
firebase.auth().verifyIdToken(req.query.idtoken).then(function(decodedToken)            {
  req.session.username = req.query.username
  req.session.idToken = decodedToken.uid;
  req.session.save(function(){
    res.json(true)
  })
})

这种方法在大多数情况下工作得很好,但在某些情况下它会发送多个请求。最高的时候是7400。

自从发布这个问题以来,我已经将主机从GAE切换到Heroku并修复了它。我知道node。js的功能还在测试阶段所以可能就是这个