Firebase Authenticatoin - 多次调用onAuthStateChanged

时间:2016-09-08 07:24:36

标签: javascript firebase-realtime-database firebase-authentication

每当我呈现主页或帐户页面时,我的会话有时会丢失。我有一个名为isSignedIn()的函数来检查uid是否存在。有时,当我刷新主页时,它返回false。当我点击我的帐户端点时,即使在上一页上它是真的,它也会返回false。有关为什么会发生这种情况的任何想法?

我的应用如何运作: 当用户登录时,我从客户端获取uid并命中auth端点。

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。任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:0)

自发布此问题以来,我已将主机从GAE切换到Heroku并修复了它。我知道node.js的功能处于测试阶段,所以也许就是它