当前位置:首页 > VUE

vue实现登录功能

2026-01-18 11:58:40VUE

创建登录页面组件

src/views 目录下新建 Login.vue 文件,包含表单元素(用户名、密码输入框和提交按钮):

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

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        // 调用登录接口
        const response = await this.$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>

配置路由

src/router/index.js 中添加登录页路由:

import Login from '@/views/Login.vue';

const routes = [
  {
    path: '/login',
    name: 'Login',
    component: Login
  }
];

封装请求工具

src/utils/request.js 中配置 Axios 实例,添加请求拦截器(如 token 验证):

import axios from 'axios';

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

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

export default instance;

状态管理(可选)

使用 Vuex 管理用户登录状态(src/store/modules/user.js):

const state = {
  token: localStorage.getItem('token') || '',
  userInfo: null
};

const mutations = {
  SET_TOKEN(state, token) {
    state.token = token;
    localStorage.setItem('token', token);
  },
  CLEAR_TOKEN(state) {
    state.token = '';
    localStorage.removeItem('token');
  }
};

export default {
  namespaced: true,
  state,
  mutations
};

添加路由守卫

src/router/index.js 中配置全局前置守卫,限制未登录访问:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token');
  if (to.name !== 'Login' && !isAuthenticated) {
    next({ name: 'Login' });
  } else {
    next();
  }
});

后端接口示例(Node.js)

提供简单的登录接口实现:

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: '认证失败' });
  }
});

样式优化

添加基础样式(Login.vue<style> 部分):

vue实现登录功能

.login-container {
  max-width: 300px;
  margin: 0 auto;
  padding: 20px;
}
input, button {
  width: 100%;
  margin: 10px 0;
  padding: 8px;
}

标签: 功能vue
分享给朋友:

相关文章

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.def…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue多选实现

vue多选实现

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

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…