vue通用登录功能实现
登录功能实现思路
Vue项目中实现通用登录功能通常需要结合前端表单验证、后端API交互、状态管理以及路由守卫。以下是关键实现步骤:
前端表单设计与验证
创建登录表单组件,包含用户名/邮箱和密码字段。使用VeeValidate或Element UI等库进行表单验证:
<template>
<form @submit.prevent="handleSubmit">
<input v-model="form.username" type="text" placeholder="用户名"/>
<input v-model="form.password" type="password" placeholder="密码"/>
<button type="submit">登录</button>
</form>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
password: ''
}
}
}
}
</script>
调用认证API
通过axios发送登录请求到后端API接口,处理响应结果:

methods: {
async handleSubmit() {
try {
const response = await axios.post('/api/auth/login', this.form)
const { token, user } = response.data
// 存储token和用户信息
} catch (error) {
console.error('登录失败:', error)
}
}
}
状态管理与Token存储
使用Vuex或Pinia管理用户登录状态,并持久化存储token:
// store/auth.js
const actions = {
async login({ commit }, credentials) {
const res = await loginApi(credentials)
commit('SET_TOKEN', res.token)
commit('SET_USER', res.user)
localStorage.setItem('token', res.token)
return res
}
}
路由守卫配置
配置全局前置守卫,保护需要认证的路由:

// router/index.js
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!store.getters.isAuthenticated) {
next({ path: '/login' })
} else {
next()
}
} else {
next()
}
})
请求拦截器
为axios添加请求拦截器,自动在请求头中加入token:
axios.interceptors.request.use(config => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
错误处理与刷新Token
实现token过期处理和自动刷新机制:
axios.interceptors.response.use(
response => response,
async error => {
if (error.response.status === 401) {
// 尝试刷新token
const newToken = await refreshToken()
if (newToken) {
error.config.headers.Authorization = `Bearer ${newToken}`
return axios(error.config)
}
// 刷新失败跳转登录
router.push('/login')
}
return Promise.reject(error)
}
)
第三方登录集成
支持OAuth2.0第三方登录(如Google、GitHub):
// 重定向到第三方认证页面
function loginWithProvider(provider) {
window.location.href = `/api/auth/${provider}`
}
安全注意事项
- 使用HTTPS协议传输敏感数据
- 前端存储token时考虑HttpOnly和Secure标志
- 实现CSRF保护机制
- 密码字段使用加密传输
- 设置合理的token过期时间
以上实现可根据具体项目需求进行调整,核心在于前后端的安全通信和状态管理。






