当前位置:首页 > 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 实现订单功能 数据模型设计 订单功能通常需要设计以下数据结构: // 订单数据结构 const order = { id: '', // 订单ID userId:…

vue状态管理怎么实现

vue状态管理怎么实现

Vue 状态管理实现方法 使用 Vuex(官方推荐) Vuex 是 Vue 的官方状态管理库,适合中大型应用。 安装 Vuex: npm install vuex --save 创建 Store 示…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…