1

Всякий раз, когда я визуализую домашнюю страницу или страницу учетной записи, моя сессия иногда теряется. У меня есть функция, называемая isSignedIn(), которая проверяет, существует ли uid. Иногда, когда я обновляю домашнюю страницу, он возвращает false. Когда я попал в конечную точку моей учетной записи, он также возвращает false, даже если это правда на предыдущей странице. Любые идеи о том, почему это происходит?Firebase Authenticatoin - onAuthStateChanged, вызываемый несколько раз

Как работает мое приложение: Когда пользователь входит в систему, я беру 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 в одной точке. Любые рекомендации приветствуются.

+0

Не совсем уверен, как вы это используете, но я рекомендую вам вызвать firebase.auth(). CurrentUser.getToken() без принудительного обновления. В вашем коде может быть несколько циклов. Вызов getToken с помощью true приведет к обновлению токена id. Это также вызовет onAuthStateChanged. Вы можете снова вызвать свою рутину, которая вызывает бесконечный цикл. – bojeil

+0

После публикации этой проблемы я переключил хосты с GAE на Heroku и исправил их. Я знаю, что функциональность с node.js находится в бета-версии, так что, возможно, именно так. – SwagJunkie

ответ

0

После публикации этой проблемы я переключил хосты с GAE на Heroku и исправил их. Я знаю, что функциональность с node.js в бета-версии, может быть, это было