当前位置:首页 > VUE

vue项目实现登录

2026-02-20 06:46:44VUE

Vue项目实现登录功能

准备工作

确保已安装Vue CLI和必要的依赖,如vue-router和axios。创建Vue项目后,设置路由和状态管理(如Vuex或Pinia)。

创建登录页面

src/views目录下创建Login.vue文件,包含表单元素(用户名和密码输入框)和提交按钮。使用v-model绑定表单数据。

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

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      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>

配置路由

src/router/index.js中配置登录页面的路由,并设置路由守卫以保护需要认证的页面。

vue项目实现登录

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

后端API交互

使用axios发送登录请求到后端API,处理响应并存储token。示例中使用/api/login作为登录接口,实际需替换为真实API地址。

import axios from 'axios'

axios.defaults.baseURL = 'https://your-api-domain.com'
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

状态管理

对于更复杂的应用,建议使用Vuex或Pinia管理用户状态。创建store模块存储用户信息和登录状态。

vue项目实现登录

// 使用Pinia示例
import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    user: null,
    isAuthenticated: false
  }),
  actions: {
    login(userData) {
      this.user = userData
      this.isAuthenticated = true
    },
    logout() {
      this.user = null
      this.isAuthenticated = false
    }
  }
})

表单验证

添加客户端表单验证,确保输入符合要求。可以使用Vuelidate或手动验证。

// 手动验证示例
methods: {
  validateForm() {
    if (!this.username.trim()) {
      alert('请输入用户名')
      return false
    }
    if (this.password.length < 6) {
      alert('密码长度至少6位')
      return false
    }
    return true
  },
  async handleLogin() {
    if (!this.validateForm()) return
    // 其余登录逻辑
  }
}

错误处理

完善错误处理逻辑,显示友好的错误信息给用户。可以捕获网络错误和业务错误。

async handleLogin() {
  try {
    const response = await axios.post('/api/login', {
      username: this.username,
      password: this.password
    })
    // 成功处理
  } catch (error) {
    if (error.response) {
      // 服务器返回的错误
      alert(error.response.data.message || '登录失败')
    } else {
      // 网络错误
      alert('网络错误,请稍后重试')
    }
  }
}

安全性考虑

确保使用HTTPS协议传输敏感数据,后端应对密码进行哈希处理。前端应避免在控制台打印敏感信息,及时清除内存中的敏感数据。

标签: 项目vue
分享给朋友:

相关文章

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue 实现上传

vue 实现上传

Vue 实现文件上传 使用 Vue 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…