当前位置:首页 > VUE

vue 实现token 登录

2026-01-08 06:44:13VUE

安装依赖

确保项目中已安装 axiosvue-router。若未安装,可通过以下命令安装:

npm install axios vue-router

配置axios拦截器

src 目录下创建 utils/http.js 文件,配置请求和响应拦截器,自动携带 token 并处理 token 过期:

import axios from 'axios';

const http = axios.create({
  baseURL: 'https://your-api-domain.com/api',
});

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

// 响应拦截器:处理token过期
http.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

export default http;

登录逻辑实现

在登录组件中调用接口获取 token 并存储:

import http from '@/utils/http';

export default {
  data() {
    return {
      form: {
        username: '',
        password: '',
      },
    };
  },
  methods: {
    async handleLogin() {
      try {
        const res = await http.post('/login', this.form);
        localStorage.setItem('token', res.data.token);
        this.$router.push('/dashboard');
      } catch (error) {
        alert('登录失败');
      }
    },
  },
};

路由守卫配置

src/router/index.js 中配置全局前置守卫,保护需要认证的路由:

import Vue from 'vue';
import Router from 'vue-router';
import Login from '@/views/Login.vue';
import Dashboard from '@/views/Dashboard.vue';

Vue.use(Router);

const router = new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } },
  ],
});

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

export default router;

登出功能实现

在需要登出的地方清除 token 并跳转至登录页:

vue 实现token 登录

methods: {
  handleLogout() {
    localStorage.removeItem('token');
    this.$router.push('/login');
  },
}

注意事项

  • Token 存储:使用 localStorage 存储 token 需注意 XSS 风险,敏感项目可改用 httpOnly cookies。
  • HTTPS:确保生产环境使用 HTTPS 传输 token。
  • 刷新 Token:若后端支持 token 刷新,可在拦截器中实现自动刷新逻辑。

标签: vuetoken
分享给朋友:

相关文章

vue实现帖子

vue实现帖子

Vue 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios 获…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue单选实现

vue单选实现

Vue 单选实现 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选效果。当用户选择不同的选…

vue实现 treegrid

vue实现 treegrid

Vue 实现 TreeGrid 的方法 使用现成组件库 Element UI、Ant Design Vue 等流行组件库提供了现成的 TreeTable/TreeGrid 组件,可直接使用。 Ele…

vue 实现音乐

vue 实现音乐

Vue 实现音乐播放功能 在 Vue 中实现音乐播放功能,可以通过 HTML5 的 <audio> 元素或第三方库如 howler.js 来实现。以下是两种方法的详细步骤: 使用 HTM…