当前位置:首页 > VUE

vue实现登录系统

2026-03-09 10:27:46VUE

实现登录系统的基本步骤

安装Vue.js及相关依赖
使用Vue CLI创建项目,安装vue-router和axios。vue-router用于页面路由管理,axios用于HTTP请求。

npm install vue-router axios

创建登录组件

在components文件夹下创建Login.vue文件,包含表单和提交逻辑。

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

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleSubmit() {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        });
        localStorage.setItem('token', response.data.token);
        this.$router.push('/dashboard');
      } catch (error) {
        console.error('登录失败:', error);
      }
    }
  }
}
</script>

配置路由

在router/index.js中设置登录路由和受保护的路由。

import Vue from 'vue'
import Router from 'vue-router'
import Login from '../components/Login.vue'
import Dashboard from '../components/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) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    const token = localStorage.getItem('token');
    if (!token) {
      next('/login');
    } else {
      next();
    }
  } else {
    next();
  }
})

export default router

处理认证状态

在main.js中配置axios全局拦截器,确保每次请求都携带token。

import axios from 'axios'

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

后端接口对接

确保后端API接收用户名和密码,验证成功后返回token。

vue实现登录系统

// 示例Node.js Express路由
app.post('/api/login', (req, res) => {
  const { username, password } = req.body;
  // 验证逻辑
  if (username === 'admin' && password === '123456') {
    res.json({ token: 'generated-jwt-token' });
  } else {
    res.status(401).json({ error: '认证失败' });
  }
});

添加注销功能

在需要注销的地方清除本地存储的token并重定向到登录页。

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

表单验证增强

使用Vuelidate等库增加表单验证功能。

npm install vuelidate

在组件中引入并使用验证规则。

vue实现登录系统

<script>
import { required, minLength } from 'vuelidate/lib/validators'

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  validations: {
    username: { required },
    password: { required, minLength: minLength(6) }
  },
  methods: {
    handleSubmit() {
      this.$v.$touch();
      if (!this.$v.$invalid) {
        // 提交逻辑
      }
    }
  }
}
</script>

响应式处理

根据登录状态显示不同内容,使用Vuex管理全局状态。

npm install vuex

创建store管理用户认证状态。

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    isAuthenticated: false
  },
  mutations: {
    setAuth(state, status) {
      state.isAuthenticated = status
    }
  }
})

在登录成功后更新状态。

methods: {
  async handleSubmit() {
    // ...登录逻辑
    this.$store.commit('setAuth', true);
  }
}

标签: 系统vue
分享给朋友:

相关文章

vue手动实现弹窗

vue手动实现弹窗

实现弹窗组件的基本结构 在Vue中手动实现弹窗组件,需要创建一个独立的弹窗组件,并通过props控制其显示与隐藏。弹窗组件通常包含遮罩层、内容区域和关闭按钮。 <template>…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentCo…