当前位置:首页 > VUE

vue项目实现注册登录

2026-02-22 13:46:48VUE

Vue 项目实现注册登录功能

项目初始化与依赖安装

创建 Vue 项目并安装必要依赖(如 Vue Router、Axios、Vuex 等):

vue create auth-demo
cd auth-demo
npm install vue-router axios vuex

路由配置

src/router/index.js 中配置路由:

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

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

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

状态管理(Vuex)

src/store/index.js 中设置用户状态:

import { createStore } from 'vuex'

export default createStore({
  state: {
    user: null,
    token: localStorage.getItem('token') || null
  },
  mutations: {
    SET_USER(state, user) {
      state.user = user
    },
    SET_TOKEN(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    CLEAR_AUTH(state) {
      state.user = null
      state.token = null
      localStorage.removeItem('token')
    }
  }
})

注册组件实现

src/views/Register.vue 示例:

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

<script>
import axios from 'axios'

export default {
  data() {
    return {
      form: {
        email: '',
        password: ''
      }
    }
  },
  methods: {
    async handleRegister() {
      try {
        const response = await axios.post('/api/register', this.form)
        this.$store.commit('SET_TOKEN', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

登录组件实现

src/views/Login.vue 示例:

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

<script>
import axios from 'axios'

export default {
  data() {
    return {
      form: {
        email: '',
        password: ''
      }
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', this.form)
        this.$store.commit('SET_TOKEN', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

路由守卫

src/router/index.js 中添加导航守卫:

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

API 请求封装

创建 src/api/auth.js 封装请求:

import axios from 'axios'

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

响应拦截处理

src/main.js 中设置响应拦截:

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

用户信息获取

在 Dashboard 组件中展示用户信息:

<template>
  <div>
    <h1>Welcome, {{ user.name }}</h1>
    <button @click="logout">Logout</button>
  </div>
</template>

<script>
export default {
  computed: {
    user() {
      return this.$store.state.user
    }
  },
  methods: {
    logout() {
      this.$store.commit('CLEAR_AUTH')
      this.$router.push('/login')
    }
  }
}
</script>

后端接口说明

示例 Node.js 后端接口(需单独实现):

// Express 示例
app.post('/api/register', (req, res) => {
  // 实现用户注册逻辑
  res.json({ token: 'generated-jwt-token' })
})

app.post('/api/login', (req, res) => {
  // 实现用户登录验证
  res.json({ token: 'generated-jwt-token' })
})

表单验证增强

建议使用 Vuelidate 或 VeeValidate 进行表单验证:

vue项目实现注册登录

npm install @vuelidate/core @vuelidate/validators

安全注意事项

  • 使用 HTTPS 协议
  • 密码需加密存储(如 bcrypt)
  • 实现 CSRF 防护
  • 设置合理的 Token 过期时间
  • 敏感操作需要二次验证

样式优化建议

  • 添加加载状态指示器
  • 实现表单错误提示
  • 使用过渡动画增强用户体验
  • 响应式布局适配移动设备

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

相关文章

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、Go…

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

实现vue cli

实现vue cli

安装 Vue CLI 确保系统中已安装 Node.js(版本建议 12.x 或更高)。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 安装完成后验证版本:…