1

Immer wenn ich die Startseite oder die Kontoseite rende, ist meine Sitzung manchmal verloren. Ich habe eine Funktion namens isSignedIn(), die überprüft, ob die UID existiert. Manchmal, wenn ich die Homepage aktualisiere, wird false zurückgegeben. Wenn ich meinen Account-Endpunkt erreiche, gibt es auch false zurück, obwohl es auf der vorherigen Seite wahr ist. Irgendwelche Ideen, warum das passiert?Firebase Authenticatoin - onAuthStateChanged mehrmals aufgerufen

So funktioniert meine App: Wenn sich ein Benutzer anmeldet, nehme ich die UID von der Clientseite und triff einen Authentifizierungsendpunkt.

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('/'); 
     } 
    }) 
    } 

}) 
} 

Dann trifft es meine node.js Code, um die Sitzung zu speichern:

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) 
    }) 
}) 

Dieser Ansatz funktioniert die meiste Zeit in Ordnung, aber einige Fälle wird es mehrere Anfragen senden. Der höchste Betrag ist 7400 an einem Punkt. Jede Anleitung wird geschätzt.

+0

Nicht wirklich sicher, wie Sie das verwenden, aber ich empfehle Sie Firebase.auth() aufrufen. CurrentUser.getToken() ohne zu erzwingen, aktualisieren. Sie könnten eine Schleife in Ihrem Code haben. Wenn getToken mit true aufgerufen wird, wird eine Aktualisierung des ID-Tokens erzwungen. Dies wird auch onAuthStateChanged auslösen. Möglicherweise rufen Sie von dort aus erneut Ihre Routine auf, die die Endlosschleife verursacht. – bojeil

+0

Seitdem ich dieses Problem gepostet habe, habe ich die Hosts von GAE auf Heroku umgestellt und das repariert. Ich weiß, dass die Funktionalität mit node.js in der Beta ist, also vielleicht war es das. – SwagJunkie

Antwort

0

Seit der Veröffentlichung dieses Problems, habe ich Hosts von GAE zu Heroku gewechselt und das hat es behoben. Ich weiß, dass die Funktionalität mit node.js in Beta ist, also vielleicht war es das

Verwandte Themen