当前位置:首页 > VUE

vue登录注册实现

2026-03-08 06:05:53VUE

实现Vue登录注册功能

项目结构搭建

使用Vue CLI创建项目,安装必要依赖如vue-router、axios、vuex。项目结构建议包含views(Login.vue、Register.vue)、router(index.js)、store(auth.js)等目录。

路由配置

在router/index.js中配置登录和注册页面的路由:

const routes = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue')
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('../views/Register.vue')
  }
]

表单组件开发

Login.vue模板部分示例:

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="email" type="email" placeholder="Email">
    <input v-model="password" type="password" placeholder="Password">
    <button type="submit">Login</button>
  </form>
</template>

状态管理

在store/auth.js中创建Vuex模块管理认证状态:

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

const mutations = {
  SET_USER(state, user) {
    state.user = user
  },
  SET_TOKEN(state, token) {
    state.token = token
    localStorage.setItem('token', token)
  }
}

API请求封装

创建services/auth.js封装HTTP请求:

import axios from 'axios'

export default {
  login(credentials) {
    return axios.post('/api/login', credentials)
  },
  register(userData) {
    return axios.post('/api/register', userData)
  }
}

表单验证处理

使用Vuelidate或自定义验证:

validations: {
  email: { required, email },
  password: { required, minLength: minLength(6) }
}

路由守卫配置

在router/index.js中添加全局前置守卫:

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

响应处理

在组件中处理API响应:

methods: {
  async handleLogin() {
    try {
      const response = await authService.login({
        email: this.email,
        password: this.password
      })
      this.$store.commit('SET_TOKEN', response.data.token)
      this.$router.push('/dashboard')
    } catch (error) {
      this.error = error.response.data.message
    }
  }
}

注册流程实现

Register.vue中实现用户注册:

<template>
  <form @submit.prevent="handleRegister">
    <input v-model="name" type="text" placeholder="Name">
    <input v-model="email" type="email" placeholder="Email">
    <input v-model="password" type="password" placeholder="Password">
    <input v-model="passwordConfirm" type="password" placeholder="Confirm Password">
    <button type="submit">Register</button>
  </form>
</template>

密码加密处理

确保后端API对密码进行加密存储,前端只需发送明文密码到安全HTTPS端点。

错误处理优化

全局配置axios拦截器处理常见错误:

vue登录注册实现

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      store.commit('LOGOUT')
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

用户体验优化

添加加载状态、成功/错误提示、自动填充检测等功能提升用户体验。

标签: vue
分享给朋友:

相关文章

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue实现搜索查询

vue实现搜索查询

Vue 实现搜索查询的方法 双向绑定实现实时搜索 在Vue中可以通过v-model绑定输入框的值,结合计算属性或watch监听输入变化实现实时搜索。 <template> <i…