如何实现页面的无感刷新

408 阅读1分钟

登录功能实现流程: 登录 -> 拿到token -> 存到vuex中 -> 用一个插件vuex-persistedstate对vuex中的token持久化 防止刷新vuex数据没了 -> axios请求拦截器中 Authorization = Bearer ${store.state.user.token} -> 401 清空token 让用户重新登录

-实现登录功能,最核心的技术是 JWT(也就是 token)。我们通过 token 来记录用户的登录状态。并把 token 存储到 vuex 中

1.首先,我们调用登录的 API 接口,把用户填写的表单信息发送给后端(在真正发起请求之前,为了让用户体验更好,可以在对表单的数据进行合法性校验)

2.后端校验通过之后,会返回一个 token 字符串,里面记录了用户的基本信息。

3.为了在项目中能够方便地获取和使用 token,我们会把 token 存储到 vuex 中。

4.由于 vuex 中的数据都是存储在内存中的,页面一刷新,状态就丢失了。因此,我们通过 vuex-persistedstate 这个插件,可以把 vuex 中的所有数据,持久化存储到本地。其实不用这个插件也可以,那就可以自己用本地存储localStorage来持久化

5.axios 的请求拦截器,判断一下有没有token,如果有就会在请求头中携带token,config.headers.Authorization = Bearer ${store.state.user.token}

6.如果 token 过期了,会触发 axios 的响应拦截器。通过 err.response.status 可以判断响应状态码是否为 401,如果是,则证明 token 过期了,我们需要清空 vuex 中的数据。并通过路由的编程式导航 API,跳转到 login 登录页面,让用户重新进行登录。