vue登录注册实现
Vue 登录注册实现
创建 Vue 项目
使用 Vue CLI 创建一个新项目:
vue create vue-auth-demo
安装依赖
安装必要的依赖,如 axios 用于 HTTP 请求,vue-router 用于路由管理:
npm install axios vue-router
配置路由
在 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 Home from '../views/Home.vue'
Vue.use(Router)
const router = new Router({
routes: [
{ path: '/login', component: Login },
{ path: '/register', component: Register },
{ path: '/', component: Home, meta: { requiresAuth: true } }
]
})
export default router
创建登录组件
在 src/views/Login.vue 中实现登录表单:

<template>
<div>
<h2>Login</h2>
<form @submit.prevent="login">
<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 login() {
try {
const response = await axios.post('/api/login', {
email: this.email,
password: this.password
})
localStorage.setItem('token', response.data.token)
this.$router.push('/')
} catch (error) {
console.error(error)
}
}
}
}
</script>
创建注册组件
在 src/views/Register.vue 中实现注册表单:
<template>
<div>
<h2>Register</h2>
<form @submit.prevent="register">
<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 register() {
try {
const response = await axios.post('/api/register', {
name: this.name,
email: this.email,
password: this.password
})
localStorage.setItem('token', response.data.token)
this.$router.push('/')
} catch (error) {
console.error(error)
}
}
}
}
</script>
添加路由守卫
在 src/router/index.js 中添加路由守卫以保护需要认证的路由:

router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!localStorage.getItem('token')) {
next('/login')
} else {
next()
}
} else {
next()
}
})
配置 API 请求
在 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
})
Vue.prototype.$http = axios
创建 Home 组件
在 src/views/Home.vue 中创建受保护的主页:
<template>
<div>
<h2>Welcome</h2>
<button @click="logout">Logout</button>
</div>
</template>
<script>
export default {
methods: {
logout() {
localStorage.removeItem('token')
this.$router.push('/login')
}
}
}
</script>
运行项目
启动开发服务器:
npm run serve
后端 API 示例
确保后端 API 提供 /api/login 和 /api/register 端点,返回包含 token 的响应。






