当前位置:首页 > VUE

vue实现登录保存token

2026-02-20 16:58:31VUE

使用Vue实现登录保存Token的方法

本地存储Token

登录成功后,将Token保存到本地存储(localStorage或sessionStorage)。localStorage持久化存储,sessionStorage会话期间有效。

localStorage.setItem('token', response.data.token);

Vuex状态管理

在Vuex中定义Token状态,通过mutation更新Token,便于全局访问和管理。

// store.js
const store = new Vuex.Store({
  state: {
    token: null
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
      localStorage.setItem('token', token);
    },
    clearToken(state) {
      state.token = null;
      localStorage.removeItem('token');
    }
  }
});

请求拦截器

在axios请求拦截器中,将Token添加到请求头中,实现自动携带Token。

vue实现登录保存token

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

响应拦截器

在axios响应拦截器中,处理Token过期或无效的情况,跳转到登录页。

axios.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response.status === 401) {
    store.commit('clearToken');
    router.push('/login');
  }
  return Promise.reject(error);
});

路由守卫

在Vue Router中使用全局前置守卫,验证Token是否存在,保护需要登录才能访问的路由。

vue实现登录保存token

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token');
  if (to.matched.some(record => record.meta.requiresAuth) && !token) {
    next('/login');
  } else {
    next();
  }
});

登录逻辑

在登录组件中,调用登录接口,成功后保存Token并跳转到首页。

methods: {
  async login() {
    try {
      const response = await axios.post('/api/login', this.form);
      this.$store.commit('setToken', response.data.token);
      this.$router.push('/');
    } catch (error) {
      console.error(error);
    }
  }
}

登出逻辑

在登出方法中清除Token,并跳转到登录页。

methods: {
  logout() {
    this.$store.commit('clearToken');
    this.$router.push('/login');
  }
}

Token刷新

对于有刷新Token需求的场景,可以在响应拦截器中检测Token过期,自动调用刷新Token接口。

axios.interceptors.response.use(response => {
  return response;
}, async error => {
  const originalRequest = error.config;
  if (error.response.status === 401 && !originalRequest._retry) {
    originalRequest._retry = true;
    const refreshToken = localStorage.getItem('refreshToken');
    const response = await axios.post('/api/refresh', { refreshToken });
    localStorage.setItem('token', response.data.token);
    return axios(originalRequest);
  }
  return Promise.reject(error);
});

标签: vuetoken
分享给朋友:

相关文章

vue实现rtc

vue实现rtc

Vue 实现 RTC 的步骤 安装依赖 在 Vue 项目中安装 WebRTC 相关依赖,如 simple-peer 或 peerjs,用于简化 WebRTC 的实现。 运行以下命令安装 simple-…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HT…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…