在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 請(qǐng)問登錄成功把返回的數(shù)據(jù)保存到localstorage里,然后再保存到vuex里

請(qǐng)問登錄成功把返回的數(shù)據(jù)保存到localstorage里,然后再保存到vuex里,一刷新瀏覽器就清空了

打算在登錄成功后將用戶名和頭像保存到vuex里,代碼如下
clipboard.png
登錄成功后提交localstorage里的狀態(tài)

clipboard.png
然后在首頁(yè)獲取狀態(tài):

clipboard.png
問題如下:刷新瀏覽器的時(shí)候vuex里的數(shù)據(jù)就清空了,我想把vuex的狀態(tài)保存到localstorage,但是這樣vuex的響應(yīng)就沒了,
請(qǐng)問我想在刷新時(shí),重新把localstorage傳入vuex,這樣應(yīng)該如何寫,求大神指點(diǎn)一下。

回答
編輯回答
墨小羽

具體代碼就不給你貼了,也不是我自己寫得。轉(zhuǎn)述一下思想。

1.登錄成功:登錄信息同時(shí)記錄到vuex和localstorage
2.刷新之后:vuex要重新加載,所以state中就可以進(jìn)行判斷isLogging,(一般來說以token的形式存在,放到header里與后端形成驗(yàn)證),也就是從localstorage抓一下,如果沒有記個(gè)空字符串或者null
3.所有非登錄請(qǐng)求之前可以判斷state中的token是否ok,不ok就跳轉(zhuǎn)到登錄,ok就可以請(qǐng)求。

// states.js
export default {
  token:isLoggedIn()||null // 這里相當(dāng)于給每次刷新重新設(shè)置初始值
}

function isLoggedIn(){
  let token = localStorage.getItem('token');
  if(token){
      const payload = JSON.parse(window.atob(token.split('.')[1]));
      // 前端判斷token是否過期,如果過期了訪問時(shí)候會(huì)路由到login頁(yè)面
      if(payload.exp>Date.now()/1000){
        return token;
      }
  }else{
    return false;
  }
}
2017年1月17日 16:01
編輯回答
旖襯

在vue的beforeMount鉤子中,將localstorag中的數(shù)據(jù)保存到vuex

new Vue({
  el: '#app',
  router,
  store: store,
  render: h => h(App),
  beforeMount() {
    this.$store.commit('saveVuex')
      }
})
2017年10月23日 04:46
編輯回答
骨殘心
//vuex
store/index.js
//初始化時(shí)用sessionStore.getItem('token'),這樣子刷新頁(yè)面就無需重新登錄
const state = {
    token: window.sessionStorage.getItem('token'),
    username: ''
};

//action.js
export default {
    UserLogin({ commit }, data) {
        commit(types.LOGIN, data);
    },
}
    // mutation.js
    
    const mutations = {
    [types.LOGIN]: (state, data) => {
        //更改token的值
        state.token = data;
        window.sessionStorage.setItem('token', data);
    }, 
};

methods:{

    login(){
      this.$store.dispatch('UserLogin', token);
    }

}
    

在路由跳轉(zhuǎn)時(shí) 判斷 vuex中 有無token

我寫的大概就是這個(gè)樣子,你將就著看 下 思路

2017年5月4日 05:01