当前位置:首页 > VUE

vue实现强制登出

2026-03-09 17:42:54VUE

Vue 实现强制登出的方法

在 Vue 应用中实现强制登出功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是几种常见的实现方式:

清除用户 Token 和状态

通过 Vuex 或 Pinia 存储用户登录状态时,需清除相关数据并移除本地存储的 Token:

vue实现强制登出

// 示例:Vuex 中的登出 action
logout({ commit }) {
  commit('CLEAR_USER_DATA');
  localStorage.removeItem('authToken');
  router.push('/login');
}

拦截请求并处理 401 状态码

在 axios 拦截器中检测到 401 未授权状态时自动触发登出:

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      store.dispatch('logout');
    }
    return Promise.reject(error);
  }
);

使用路由守卫强制跳转

通过全局路由守卫检查用户认证状态:

vue实现强制登出

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.getters.isAuthenticated;
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

服务端推送强制登出

通过 WebSocket 或 SSE 接收服务端强制登出指令:

const eventSource = new EventSource('/api/auth-events');
eventSource.addEventListener('force-logout', () => {
  store.dispatch('logout');
});

完整示例代码

整合 Vuex 和路由守卫的完整实现:

// store.js
const store = new Vuex.Store({
  state: {
    user: null,
    token: null
  },
  mutations: {
    SET_USER_DATA(state, { user, token }) {
      state.user = user;
      state.token = token;
      localStorage.setItem('authToken', token);
    },
    CLEAR_USER_DATA(state) {
      state.user = null;
      state.token = null;
      localStorage.removeItem('authToken');
    }
  },
  actions: {
    logout({ commit }) {
      commit('CLEAR_USER_DATA');
      router.push('/login');
    }
  }
});

// main.js
axios.interceptors.response.use(null, error => {
  if (error.response.status === 401) {
    store.dispatch('logout');
  }
  return Promise.reject(error);
});

router.beforeEach((to, from, next) => {
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
  const isAuthenticated = store.state.token !== null;

  if (requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

实现时需注意清除所有认证相关的存储数据,包括 Vuex/Pinia 状态、localStorage/sessionStorage 以及 Cookie。对于敏感应用,建议同时通知后端使当前 Token 失效。

标签: vue
分享给朋友:

相关文章

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现转盘抽奖

vue实现转盘抽奖

Vue 实现转盘抽奖 基本思路 转盘抽奖的核心是通过 CSS 动画实现旋转效果,Vue 负责控制旋转逻辑和数据绑定。关键点包括转盘扇形区域的绘制、旋转动画的触发与停止、中奖结果的判定。 实现步骤 H…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…