当前位置:首页 > VUE

vue登录实现

2026-02-10 09:31:58VUE

Vue 登录功能实现

环境准备
确保已安装 Vue CLI 或 Vite 创建的项目,并安装必要的依赖(如 axios 用于网络请求、vue-router 用于路由跳转)。

npm install axios vue-router

登录页面组件

创建 Login.vue 文件,包含表单和基础校验逻辑:

<template>
  <div class="login-container">
    <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>
    <p v-if="error" class="error">{{ error }}</p>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
      error: ''
    };
  },
  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 (err) {
        this.error = err.response?.data?.message || '登录失败';
      }
    }
  }
};
</script>

路由配置

router/index.js 中配置登录路由和守卫:

import { createRouter, createWebHistory } from 'vue-router';
import Login from '../views/Login.vue';
import Dashboard from '../views/Dashboard.vue';

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

const router = createRouter({
  history: createWebHistory(),
  routes
});

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

export default router;

后端接口模拟(可选)

使用 json-server 快速模拟登录 API:

vue登录实现

  1. 创建 db.json 文件:

    {
    "users": [
     { "id": 1, "username": "admin", "password": "123456" }
    ]
    }
  2. 启动模拟服务:

    vue登录实现

    npx json-server --watch db.json --port 3000
  3. 修改 Login.vue 中的请求地址为 http://localhost:3000/users,根据实际返回调整逻辑。

状态管理(Vuex/Pinia)

使用 Pinia 管理登录状态(示例):

  1. 创建 stores/auth.js
    
    import { defineStore } from 'pinia';

export const useAuthStore = defineStore('auth', { state: () => ({ token: localStorage.getItem('token') || null }), actions: { setToken(token) { this.token = token; localStorage.setItem('token', token); }, clearToken() { this.token = null; localStorage.removeItem('token'); } } });


2. 在组件中使用:
```javascript
import { useAuthStore } from '../stores/auth';

// 替换原有的 localStorage 操作
const authStore = useAuthStore();
authStore.setToken(response.data.token);

安全增强建议

  • 使用 HTTPS 传输数据
  • 密码加密(如 bcryptjs)
  • 添加验证码或限流机制
  • 服务端设置 Token 过期时间

标签: vue
分享给朋友:

相关文章

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现ppt

vue实现ppt

Vue 实现 PPT 的功能 Vue 可以结合第三方库或自定义组件实现类似 PPT 的演示效果。以下是几种常见的方法: 使用第三方库 reveal.js reveal.js 是一个流行的演示框架,支…

vue实现分站

vue实现分站

Vue 实现分站的方案 在 Vue 中实现分站功能通常涉及路由配置、环境变量管理和动态加载资源。以下是几种常见的实现方式: 基于路由的分站实现 通过 Vue Router 配置多路由,区分不同站点的…