vuex-persistedstate 在 sessionStorage 和 localStorage 之间切换

vuex-persistedstate switch between sessionStorage and localStorage

如果用户选中“记住我”复选框,我想从 sessionStorage 切换到 localStorage,我也使用 vuex-persistedstate

export default store(function (/* { ssrContext } */) {
  const Store = createStore({
    state: {
    },
    actions: {
      setLodingMode({ commit }, newMode) {
        commit("SET_LOADING_MODE", newMode);
      },
      resetStates({ commit }) {
        commit("AUTHENTICATION_RESET_STATE");
        commit("login/RESET_STATE");
      },
    },
    modules: { login, authentication },
    plugins: [createPersistedState()],
  });

  return Store;
});

重点来了我要改成这样

state: {
      flag: false
        },
plugins: [
      createPersistedState({
        storage: flag ? window.localStorage : window.sessionStorage,
      }),
    ],

我想在登录时通过用户“记住我”复选框更改标志,因此当用户选择复选框时,标志更改为 true 并且所有数据都保存在 localStorage

作为@Estus Flask 的评论,我使用了自定义存储,并通过直接调用 localStorage 并在 localStorage 中设置标志来管理“记住我”选项

plugins: [
      createPersistedState({
        paths: ["authentication.userAuthenticationInfo"],
        storage: {
          getItem(key) {
            if (localStorage.getItem("rememberMe") == 1) {
              return localStorage.getItem(key);
            } else {
              return Cookies.get(key);
              //return sessionStorage.getItem(key);
            }
          },
          setItem(key, value) {
            if (localStorage.getItem("rememberMe") == 1) {
              localStorage.setItem(key, value);
            } else {
              Cookies.set(key, value);
              //sessionStorage.setItem(key, value);
            }
          },
          removeItem(key) {
            if (localStorage.getItem("rememberMe") == 1) {
              localStorage.removeItem(key);
            } else {
              Cookies.remove(key);
              //sessionStorage.removeItem(key);
            }
          },
        },
      }),
    ],

并且我在每次注销或 401 响应中清除 localStorage