GithubHelp home page GithubHelp logo

Comments (5)

robinvdvleuten avatar robinvdvleuten commented on May 17, 2024

@LeonLiber can you please provide a https://jsfiddle.net/ with your situation / example of your setup?

from vuex-persistedstate.

arliber avatar arliber commented on May 17, 2024

Hi @robinvdvleuten, It's a bit of a complicated setup for jsfiddle so I'll try to post it here.

The core of the store looks like that:

import Vue from 'vue';
import Vuex from 'vuex';
import persistedState from 'vuex-persistedstate';

Vue.use(Vuex);

export default new Vuex.Store({
  plugins: [persistedState({
    paths: ['user'],
  })],
  state: {
    user: { },
  },
  getters: {
    isUserLoggedin(state) {
      return Object.keys(state.user).length > 0;
    },
    user(state) {
      return state.user;
    },
  },
  mutations: {
    SET_USER(state, userData) {
      state.user = userData;
    },
    UNSET_USER(state) {
      state.user = {};
    },
  },
  actions: {
    setUser({ commit }, userData) {
      commit('SET_USER', userData);
    },
    unsetUser({ commit }) {
      commit('UNSET_USER');
    },
  },
});

I want to subscribe to the "resetting" of the user so I can set a default http headers with the proper user token.

This is what I tried:

 store.subscribe((mutation) => {
   console.log('MUTATED', mutation);
});

And I get no log when user is re-set after page refresh.

UPDATE
I think (not tried yet) that I could replace the getState method on init with something like that:

getState = (key, storage) => {
      const value = storage.getItem(key);
     // My custom code to set Axios headers
      return value && value !== 'undefined' ? JSON.parse(value) : undefined;
    }

But it feels like an ugly workaround :(

Would love to hear your thoughts,
Thanks!

from vuex-persistedstate.

robinvdvleuten avatar robinvdvleuten commented on May 17, 2024

@LeonLiber so as I try to understand your issue, you are trying to set custom axios headers when your app is initialised right?

from vuex-persistedstate.

arliber avatar arliber commented on May 17, 2024

@robinvdvleuten Correct. The token I'm going to store in the header is coming from the persistent store so I need to act on the state "rehydration"

from vuex-persistedstate.

robinvdvleuten avatar robinvdvleuten commented on May 17, 2024

@LeonLiber why not fetch the correct header from the store when initializing your app (so after the store is dehydrated). Please see both urls for an example;

https://github.com/robinvdvleuten/vue-auth0-vuex/blob/master/template/src/router/index.js#L36
https://github.com/robinvdvleuten/vue-auth0-vuex/blob/master/template/src/router/index.js#L9

This onEnter hook dispatches an event which will fetch a new token. You can use the same pattern for setting the header on axios by fetching the value from the store.

from vuex-persistedstate.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.