Pour augmenter les performances de mon application de réaction lors du rechargement de la page, je stocke les informations d'identification de l'utilisateur sur le stockage local et les efface à la déconnexion. Mais les utilisateurs ne se déconnectent souvent pas ces jours-ci et les informations d'identification des utilisateurs peuvent rester dans le stockage local pendant longtemps, ce qui, je pense, peut entraîner des fuites de sécurité ? Je ne suis pas un expert de la sécurité Firebase, alors quelqu'un peut-il m'expliquer si c'est sûr ?

firebase.auth().onAuthStateChanged(user=>{
    if (user) {
        localStorage.setItem('user', JSON.stringify(user));
    } else {
        localStorage.removeItem('user');
    }
})
3
FishLegs 11 févr. 2020 à 16:50

2 réponses

Meilleure réponse

Sur la plupart des plates-formes, le SDK d'authentification Firebase stocke déjà automatiquement les informations d'identification de l'utilisateur dans le stockage local et les recharge à partir de là lorsque l'application redémarre/recharge la page. La raison pour laquelle vous voyez toujours un délai lors du rechargement d'une page avant le déclenchement de onAuthStateChanged est que le client vérifie auprès du serveur si les informations d'identification sont (encore) valides.

Une solution de contournement simple pour pouvoir agir immédiatement lorsque la page se charge, pendant Firebase vérifie les informations d'identification, consiste à stocker vous-même une valeur sur le dernier état d'authentification connu dans le stockage local et à l'utiliser pour déterminer votre action initiale. C'est essentiellement ce que vous faites avec l'objet user dans votre question.

Il n'y a rien de mal à cela, tant que vous comprenez que la première fois que onAuthStateChanged se déclenche, les données peuvent être différentes de celles que vous avez stockées. Ce ne sera généralement pas le cas, mais cela peut, ce qui est la seule raison pour laquelle Firebase doit vérifier les informations d'identification pour commencer.

Voir également ma réponse à cette question connexe d'hier : Firebase auth.currentUser est nul lors du chargement de la page, l'utilisateur est chargé lorsque authstatechange est appelé après quelques millisecondes de chargement de la page

1
Frank van Puffelen 11 févr. 2020 à 13:59

Je suggérerais de changer le persistant en Persistent.SESSION.

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)

Oui, cela ne couvre pas tout le problème (car l'utilisateur peut également ne pas fermer le navigateur), mais cela a du sens.

0
BambinoUA 13 avril 2021 à 08:11