当前位置:首页 > VUE

vue实现登录验证

2026-02-25 14:45:08VUE

Vue 实现登录验证的方法

使用 Vue Router 进行路由守卫

在 Vue 项目中,可以通过 Vue Router 的导航守卫(beforeEach)实现登录验证。如果用户未登录,则重定向到登录页面。

vue实现登录验证

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Login from '@/views/Login.vue';
import Home from '@/views/Home.vue';

Vue.use(Router);

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

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token'); // 检查本地存储的 token
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login'); // 未登录则跳转到登录页
  } else {
    next(); // 已登录则放行
  }
});

export default router;

表单验证与 API 请求

在登录页面中,可以通过表单验证和向后端发送请求实现登录逻辑。

vue实现登录验证

// views/Login.vue
<template>
  <div>
    <form @submit.prevent="handleLogin">
      <input v-model="form.username" placeholder="用户名" />
      <input v-model="form.password" type="password" placeholder="密码" />
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    };
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', this.form);
        localStorage.setItem('token', response.data.token); // 存储 token
        this.$router.push('/home'); // 跳转到主页
      } catch (error) {
        console.error('登录失败:', error);
      }
    }
  }
};
</script>

使用 Vuex 管理登录状态

如果需要全局管理登录状态,可以使用 Vuex 存储用户信息和登录状态。

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null
  },
  mutations: {
    setAuth(state, payload) {
      state.isAuthenticated = payload.isAuthenticated;
      state.user = payload.user;
    }
  },
  actions: {
    login({ commit }, userData) {
      return axios.post('/api/login', userData).then(response => {
        commit('setAuth', {
          isAuthenticated: true,
          user: response.data.user
        });
        localStorage.setItem('token', response.data.token);
      });
    },
    logout({ commit }) {
      localStorage.removeItem('token');
      commit('setAuth', {
        isAuthenticated: false,
        user: null
      });
    }
  }
});

结合 Axios 拦截器验证 Token

在每次请求时,可以通过 Axios 拦截器自动附加 token 并处理未授权的响应。

// utils/axios.js
import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://your-api-url.com'
});

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

instance.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      localStorage.removeItem('token');
      window.location.href = '/login'; // 未授权则跳转到登录页
    }
    return Promise.reject(error);
  }
);

export default instance;

总结

通过 Vue Router 的路由守卫、表单验证、Vuex 状态管理和 Axios 拦截器,可以实现完整的登录验证流程。确保在用户未登录时限制访问受保护的路由,并在登录后正确存储和发送 token。

标签: vue
分享给朋友:

相关文章

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSelec…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…