当前位置:首页 > VUE

vue实现前端登录

2026-02-20 13:24:40VUE

Vue 前端登录实现方案

基础登录表单实现

创建登录表单组件,包含用户名和密码输入框。使用v-model双向绑定数据,通过@submit监听表单提交事件。

<template>
  <form @submit.prevent="handleLogin">
    <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: ''
      }
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', this.form)
        // 处理登录成功逻辑
      } catch (error) {
        // 处理错误
      }
    }
  }
}
</script>

状态管理与Token存储

使用Vuex管理登录状态,登录成功后存储token至localStorage和Vuex。

// store/auth.js
const state = {
  token: localStorage.getItem('token') || '',
  user: null
}

const mutations = {
  SET_TOKEN(state, token) {
    state.token = token
    localStorage.setItem('token', token)
  },
  SET_USER(state, user) {
    state.user = user
  }
}

const actions = {
  async login({ commit }, credentials) {
    const response = await axios.post('/api/login', credentials)
    commit('SET_TOKEN', response.data.token)
    commit('SET_USER', response.data.user)
  }
}

路由守卫配置

配置全局路由守卫,保护需要认证的路由。

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

Axios请求拦截

设置axios请求拦截器,自动为请求添加认证头。

// utils/axios.js
axios.interceptors.request.use(config => {
  const token = store.state.auth.token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

响应拦截与错误处理

配置响应拦截器处理401未授权错误。

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

登录状态持久化

实现刷新页面后自动恢复登录状态。

// App.vue
export default {
  created() {
    const token = localStorage.getItem('token')
    if (token) {
      this.$store.dispatch('auth/fetchUser')
    }
  }
}

第三方登录集成

支持OAuth2.0第三方登录(如Google、GitHub)。

methods: {
  initiateOAuth(provider) {
    window.location.href = `/api/auth/${provider}`
  }
}

表单验证增强

使用Vuelidate或vee-validate进行表单验证。

import { required, minLength } from 'vuelidate/lib/validators'

export default {
  validations: {
    form: {
      username: { required },
      password: { required, minLength: minLength(6) }
    }
  }
}

安全增强措施

实现CSRF防护和XSS防护。

// main.js
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'

性能优化

实现懒加载登录相关组件。

vue实现前端登录

const Login = () => import('./views/Login.vue')

标签: vue
分享给朋友:

相关文章

vue tag实现

vue tag实现

Vue 标签实现方法 在 Vue 中实现标签功能可以通过多种方式完成,常见场景包括动态标签生成、标签输入框、标签管理等。以下是几种典型实现方案: 动态标签列表渲染 使用 v-for 指令渲染标签数组…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现gps

vue实现gps

Vue 中实现 GPS 定位功能 在 Vue 中实现 GPS 定位功能通常依赖于浏览器的 Geolocation API 或第三方地图服务(如高德、百度地图等)。以下是两种常见的实现方式: 使用浏览…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…