当前位置:首页 > VUE

用vue实现登录注册

2026-02-25 06:40:36VUE

安装 Vue 和相关依赖

确保已安装 Node.js 和 npm/yarn。创建一个新的 Vue 项目:

vue create vue-auth-demo

进入项目目录并安装必要依赖:

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

配置路由

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'

Vue.use(Router)

export default new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/register', component: Register }
  ]
})

创建登录组件

src/views/Login.vue 中实现登录表单:

<template>
  <div>
    <h2>登录</h2>
    <form @submit.prevent="handleLogin">
      <input v-model="email" type="email" placeholder="邮箱" required>
      <input v-model="password" type="password" placeholder="密码" required>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    handleLogin() {
      this.$store.dispatch('login', {
        email: this.email,
        password: this.password
      })
    }
  }
}
</script>

创建注册组件

src/views/Register.vue 中实现注册表单:

<template>
  <div>
    <h2>注册</h2>
    <form @submit.prevent="handleRegister">
      <input v-model="email" type="email" placeholder="邮箱" required>
      <input v-model="password" type="password" placeholder="密码" required>
      <button type="submit">注册</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    handleRegister() {
      this.$store.dispatch('register', {
        email: this.email,
        password: this.password
      })
    }
  }
}
</script>

设置 Vuex 状态管理

src/store/index.js 中配置认证相关的状态和逻辑:

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  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)
    }
  },
  actions: {
    async login({ commit }, credentials) {
      const response = await axios.post('/api/login', credentials)
      commit('SET_USER', response.data.user)
      commit('SET_TOKEN', response.data.token)
    },
    async register({ commit }, credentials) {
      const response = await axios.post('/api/register', credentials)
      commit('SET_USER', response.data.user)
      commit('SET_TOKEN', response.data.token)
    }
  }
})

配置 axios 拦截器

src/main.js 中设置全局的 axios 配置:

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

添加导航守卫

src/router/index.js 中添加路由守卫保护需要认证的页面:

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

后端 API 示例

一个简单的 Express 登录注册 API 示例:

用vue实现登录注册

const express = require('express')
const jwt = require('jsonwebtoken')
const app = express()

app.use(express.json())

const users = []

app.post('/api/register', (req, res) => {
  const { email, password } = req.body
  const user = { email, password }
  users.push(user)
  const token = jwt.sign({ email }, 'secret_key')
  res.json({ user, token })
})

app.post('/api/login', (req, res) => {
  const { email, password } = req.body
  const user = users.find(u => u.email === email && u.password === password)
  if (user) {
    const token = jwt.sign({ email }, 'secret_key')
    res.json({ user, token })
  } else {
    res.status(401).json({ error: 'Invalid credentials' })
  }
})

app.listen(3000, () => console.log('Server running'))

标签: vue
分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&g…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-pdf…

vue实现grid

vue实现grid

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

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…