当前位置:首页 > VUE

vue.js实现token

2026-02-23 05:22:19VUE

Vue.js 中实现 Token 认证的方法

使用 localStorage 或 sessionStorage 存储 Token

在用户登录成功后,将服务器返回的 Token 存储在客户端的 localStorage 或 sessionStorage 中。localStorage 适合长期存储,sessionStorage 在浏览器关闭后自动清除。

// 登录成功后存储 Token
localStorage.setItem('auth_token', response.data.token);

在每次发送请求时,从存储中获取 Token 并添加到请求头中。

// 在请求拦截器中添加 Token
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('auth_token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

使用 Vuex 集中管理 Token 状态

在 Vuex 中定义 Token 的状态和操作,方便全局访问和管理。

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

在组件中通过 Vuex 的 action 和 mutation 操作 Token。

// 在组件中调用登录
this.$store.dispatch('login', response.data.token);

路由守卫验证 Token

使用 Vue Router 的路由守卫验证 Token,确保用户在访问受保护路由时已登录。

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

在路由配置中标记需要认证的路由。

{
  path: '/dashboard',
  component: Dashboard,
  meta: { requiresAuth: true }
}

Token 过期处理

在响应拦截器中检查 Token 是否过期,过期时跳转到登录页面或刷新 Token。

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

使用第三方库管理 Token

可以使用如 vue-authenticatevue-auth 等第三方库简化 Token 管理流程。这些库通常提供开箱即用的认证功能,包括 Token 存储、请求拦截和路由守卫。

vue.js实现token

// 使用 vue-auth 示例
Vue.use(require('@websanova/vue-auth'), {
  auth: require('@websanova/vue-auth/drivers/auth/bearer.js'),
  http: require('@websanova/vue-auth/drivers/http/axios.1.x.js'),
  router: require('@websanova/vue-auth/drivers/router/vue-router.2.x.js'),
});

安全性注意事项

避免在客户端存储敏感信息,确保 Token 通过 HTTPS 传输。设置合理的 Token 过期时间,减少被滥用的风险。使用 HttpOnly 和 Secure 标志的 Cookie 存储 Token 可以增加安全性,但需根据应用需求权衡。

标签: vuejs
分享给朋友:

相关文章

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…