首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入路由前刷新令牌Vuex

输入路由前刷新令牌Vuex
EN

Stack Overflow用户
提问于 2019-02-13 18:21:50
回答 2查看 2K关注 0票数 1

我有一个前端Web应用程序接口,API内置于。

我的问题是当我刷新页面时(在用Vuejs/Vuex编写的SPA中),我应该刷新我的令牌,以便用我的Api刷新会话。

我在main.js中尝试过,但他的问题是请求是异步的,响应在路由之后到达。

main.js

代码语言:javascript
复制
if (localStorage.getItem('refresh_token')) {
   store.dispatch('refresh_token').then(function(response){
      console.log(response);
   });
}
new Vue({
  router,
  store,
  env,
  render: h => h(App)
}).$mount('#app')

函数刷新令牌,调用我的Api,并通过响应设置新令牌和新刷新令牌。但我的问题是,通过这种方式,我可以使用旧令牌在我的“仪表板”中进行第一个异步调用,然后使用新的调用。因此,我尝试了不同的方式,但我不知道是否有最佳做法。

因此,我的问题是:在Vuejs应用程序中,我应该在哪里使用vuex商店刷新令牌?

EN

Stack Overflow用户

发布于 2019-02-14 02:16:47

我建议将它放在toplevel Vue组件的mounted属性中。如果您有依赖于正在刷新的令牌的其他组件,则可以将其与存储中的状态变量相结合,该状态变量表示刷新已经完成。例如,使用顶级组件App.vue

代码语言:javascript
复制
...

mounted () {
  store.dispatch('refresh_token')
}

...

将状态变量添加到vueex存储区:

代码语言:javascript
复制
const store = new Vuex.Store({
  state: {
    sessionRefreshed: false
  },
  ..

  mutations: {
    [REFRESH_TOKEN] (state) {
      // existing mutations, and..
      state.sessionRefreshed = true
    },
  },
  ..
  actions: {
    refreshToken ({ commit }) {
      myAsyncFetchToken().then(() => commit(REFRESH_TOKEN))
    },
  }

这可以确保整个应用程序知道刷新的状态,而不强制它是同步的。然后,如果您有需要刷新令牌的组件,则可以显示加载小部件、占位符等,并在状态发生变化时使用观察者进行操作。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54676964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档