当前位置:首页 > VUE

vue登录注册实现源码

2026-02-24 05:54:18VUE

Vue 登录注册实现源码

基础项目结构

使用 Vue CLI 创建项目,安装必要依赖(如 vue-routeraxios):

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

路由配置

src/router/index.js 中配置登录和注册路由:

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/Login.vue'
import Register from '@/views/Register.vue'
import Dashboard from '@/views/Dashboard.vue'

Vue.use(Router)

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

登录组件

src/views/Login.vue 示例代码:

vue登录注册实现源码

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

<script>
export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await this.$axios.post('/api/login', {
          email: this.email,
          password: this.password
        })
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('Login failed')
      }
    }
  }
}
</script>

注册组件

src/views/Register.vue 示例代码:

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

<script>
export default {
  data() {
    return {
      name: '',
      email: '',
      password: ''
    }
  },
  methods: {
    async handleRegister() {
      try {
        await this.$axios.post('/api/register', {
          name: this.name,
          email: this.email,
          password: this.password
        })
        this.$router.push('/login')
      } catch (error) {
        alert('Registration failed')
      }
    }
  }
}
</script>

路由守卫

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

vue登录注册实现源码

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

API 请求封装

src/main.js 中配置 axios:

import axios from 'axios'
Vue.prototype.$axios = axios.create({
  baseURL: 'http://your-api-url.com'
})

后端接口示例

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

// Express 示例
app.post('/api/login', (req, res) => {
  // 验证用户逻辑
  res.json({ token: 'generated-jwt-token' })
})

app.post('/api/register', (req, res) => {
  // 用户注册逻辑
  res.json({ success: true })
})

关键点说明

  • 使用 localStorage 存储 JWT 令牌
  • 表单提交时阻止默认事件(@submit.prevent
  • 路由守卫保护需要认证的页面
  • 错误处理通过 try/catch 实现

以上代码需根据实际项目调整,例如添加表单验证、错误提示优化等。

标签: 源码vue
分享给朋友:

相关文章

vue实现接口轮询

vue实现接口轮询

实现接口轮询的基本方法 在Vue中实现接口轮询通常通过setInterval或setTimeout结合异步请求完成。以下是一个基础实现示例: data() { return { poll…

vue实现添加div

vue实现添加div

在 Vue 中动态添加 div 元素 使用 v-for 指令动态渲染 div 通过 v-for 可以基于数组数据动态生成多个 div 元素。在模板中绑定数组数据,Vue 会自动遍历数组并为每个元素创建…

vue实现导出表格

vue实现导出表格

Vue 中实现表格导出 使用 xlsx 库导出 Excel 安装 xlsx 库: npm install xlsx --save 在 Vue 组件中引入并使用: import XLSX from…

设计与实现vue

设计与实现vue

Vue 设计与实现概述 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心设计理念包括响应式数据绑定、组件化开发和虚拟 DOM 渲染。以下是 Vue 设计与实现的关键点。 核…

vue实现头像剪切

vue实现头像剪切

Vue 实现头像剪切的步骤 使用 vue-cropper 库 vue-cropper 是一个基于 Vue 的图片裁剪组件,支持缩放、旋转、裁剪等功能。 安装依赖: npm install vue-…

vue实现tab换行

vue实现tab换行

实现 Vue 中的 Tab 换行功能 在 Vue 中实现 Tab 换行功能,可以通过监听键盘事件并阻止默认行为来实现。以下是几种常见的方法: 方法一:使用 @keydown 事件监听 在模板中添加…