当前位置:首页 > VUE

vue登录模块实现

2026-03-29 14:03:09VUE

实现 Vue 登录模块

前端实现

创建登录表单组件,使用 v-model 绑定用户名和密码数据,通过 axios 发送登录请求。

<template>
  <div>
    <input v-model="username" placeholder="用户名" />
    <input v-model="password" type="password" placeholder="密码" />
    <button @click="handleLogin">登录</button>
  </div>
</template>

<script>
import axios from 'axios';

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

后端实现

使用 Node.js 和 Express 创建登录接口,验证用户凭证并返回 JWT 令牌。

vue登录模块实现

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();

app.use(express.json());

app.post('/api/login', (req, res) => {
  const { username, password } = req.body;

  // 实际项目中应从数据库验证用户
  if (username === 'admin' && password === '123456') {
    const token = jwt.sign({ username }, 'secret_key', { expiresIn: '1h' });
    res.json({ token });
  } else {
    res.status(401).json({ error: '用户名或密码错误' });
  }
});

app.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000');
});

路由守卫

在 Vue 路由中设置全局前置守卫,保护需要认证的路由。

import Vue from 'vue';
import Router from 'vue-router';

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();
  }
});

状态管理

使用 Vuex 管理用户认证状态。

vue登录模块实现

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    token: localStorage.getItem('token') || null
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
      localStorage.setItem('token', token);
    },
    clearToken(state) {
      state.token = null;
      localStorage.removeItem('token');
    }
  },
  actions: {
    login({ commit }, { username, password }) {
      return axios.post('/api/login', { username, password })
        .then(response => {
          commit('setToken', response.data.token);
        });
    },
    logout({ commit }) {
      commit('clearToken');
    }
  },
  getters: {
    isAuthenticated: state => !!state.token
  }
});

表单验证

使用 Vuelidate 添加表单验证规则。

import { required, minLength } from 'vuelidate/lib/validators';

export default {
  data() {
    return {
      username: '',
      password: ''
    };
  },
  validations: {
    username: { required },
    password: { required, minLength: minLength(6) }
  },
  methods: {
    handleLogin() {
      this.$v.$touch();
      if (!this.$v.$invalid) {
        // 发送登录请求
      }
    }
  }
};

错误处理

在登录失败时显示错误信息。

<template>
  <div>
    <div v-if="error" class="error">{{ error }}</div>
    <!-- 表单内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      error: ''
    };
  },
  methods: {
    handleLogin() {
      axios.post('/api/login', {
        username: this.username,
        password: this.password
      })
      .catch(error => {
        this.error = '登录失败: ' + (error.response?.data?.error || '未知错误');
      });
    }
  }
};
</script>

标签: 模块vue
分享给朋友:

相关文章

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…

vue实现产品搜索

vue实现产品搜索

实现产品搜索功能 在Vue中实现产品搜索功能需要结合前端界面和后端数据处理。以下是实现的基本思路和代码示例: 数据准备 创建一个产品数据数组,包含需要搜索的产品信息: data() { ret…

vue视频怎么实现

vue视频怎么实现

实现视频播放功能 在Vue中实现视频播放功能可以通过HTML5的<video>标签或第三方库来实现。以下是几种常见的方法: 使用HTML5 <video>标签 <te…

vue实现页面切换

vue实现页面切换

Vue 实现页面切换的方法 在 Vue 中实现页面切换通常可以通过以下几种方式完成,具体选择取决于项目需求和架构设计。 使用 Vue Router Vue Router 是 Vue.js 官方推荐的…

vue实现按钮渐变

vue实现按钮渐变

实现按钮渐变的几种方法 使用CSS线性渐变 通过CSS的background属性结合linear-gradient函数实现颜色渐变效果。在Vue组件的<style>部分直接定义样式: .…

vue实现无限循环

vue实现无限循环

Vue实现无限循环的方法 在Vue中实现无限循环可以通过多种方式完成,以下是几种常见的方法: 使用CSS动画 通过CSS的animation属性结合@keyframes可以实现无限循环动画效果。…