156 votes

État de Vuex lors du rafraîchissement de la page

Mon application utilise l'API Firebase pour l'authentification des utilisateurs, enregistrant le statut de connexion comme une valeur booléenne dans un état Vuex.

Lorsque l'utilisateur se connecte, je définis le statut de connexion et j'affiche conditionnellement le bouton Connexion/Déconnexion en conséquence.

Mais lorsque la page est rafraîchie, l'état de l'application vue est perdu et réinitialisé par défaut

Cela pose un problème car même lorsque l'utilisateur est connecté et que la page est rafraîchie, le statut de connexion est à nouveau défini sur false et le bouton de connexion est affiché au lieu du bouton de déconnexion, même si l'utilisateur reste connecté....

Que dois-je faire pour empêcher ce comportement

Dois-je utiliser des cookies Ou une autre meilleure solution est disponible...

-

3 votes

Je n'utilise aucun type de stockage local pour gérer cela. Il peut s'agir de Cookies ou autre chose

0 votes

@El_Matella à part les cookies, quel autre méthode utilisez-vous pour stocker des données localement

1 votes

En général, j'utilise un package npm de stockage local qui peut choisir la meilleure méthode pour stocker les données pour moi : npmjs.com/package/local-storage "L'API est un moyen simplifié d'interagir avec tout ce qui concerne le stockage local. Notez que lorsque le stockage local n'est pas pris en charge dans le navigateur actuel, un stockage en mémoire est utilisé de manière transparente."

4voto

Alenn G'Kar Points 60

J'ai résolu ce problème en réinitialisant mes en-têtes à chaque fois que je recharge aussi les données de l'utilisateur, je ne sais pas ce qui est mieux ...

new Vue({
    el: 'vue',
    render: h => h(VueBox),
    router,
    store,

    computed: {
        tokenJWT () {
            return this.$store.getters.tokenCheck
        },
    },

    created() {
        this.setAuth()

    },

    methods:
        Object.assign({}, mapActions(['setUser']), {

            setAuth(){
                if (this.tokenJWT) {
                    if (this.tokenJWT === 'expired') {
                        this.$store.dispatch('destroyAuth')
                        this.$store.dispatch('openModal')
                        this.$store.dispatch('setElModal', 'form-login')

                    } else {
                        window.axios.defaults.headers.common = {
                            'Accept': 'application/json',
                            'Authorization': 'Bearer ' + this.tokenJWT
                        }
                        axios.get( api.domain + api.authApi )
                            .then(res => {
                                if (res.status == 200) {
                                    this.setUser( res.data.user )
                                }
                            })
                            .catch( errors => {
                                console.log(errors)
                                this.destroyAuth()
                            })
                    }
                }
            }
        })

})

0 votes

Cette solution a fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X