当前位置:首页 > VUE

vue前端实现登录

2026-02-09 12:48:07VUE

Vue 前端登录实现方案

基础登录组件实现

创建登录表单组件,包含用户名和密码输入框

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="username" type="text" placeholder="用户名"/>
    <input v-model="password" type="password" placeholder="密码"/>
    <button type="submit">登录</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        })
        // 处理登录成功逻辑
      } catch (error) {
        // 处理错误
      }
    }
  }
}
</script>

状态管理与Token存储

使用Vuex管理登录状态和用户信息

// store/auth.js
export default {
  state: {
    token: localStorage.getItem('token') || null,
    user: null
  },
  mutations: {
    SET_TOKEN(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    SET_USER(state, user) {
      state.user = user
    },
    CLEAR_AUTH(state) {
      state.token = null
      state.user = null
      localStorage.removeItem('token')
    }
  },
  actions: {
    login({ commit }, credentials) {
      return axios.post('/api/login', credentials)
        .then(response => {
          commit('SET_TOKEN', response.data.token)
          commit('SET_USER', response.data.user)
          return response
        })
    }
  }
}

路由守卫配置

配置全局路由守卫实现页面访问控制

vue前端实现登录

// router/index.js
router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.auth.token !== null
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !isAuthenticated) {
    next('/login')
  } else if (to.path === '/login' && isAuthenticated) {
    next('/')
  } else {
    next()
  }
})

Axios拦截器配置

设置请求拦截器自动添加Token

// 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)
})

// 响应拦截器处理Token过期
axios.interceptors.response.use(response => {
  return response
}, error => {
  if (error.response.status === 401) {
    store.commit('CLEAR_AUTH')
    router.push('/login')
  }
  return Promise.reject(error)
})

登录后跳转处理

处理登录成功后的页面跳转

vue前端实现登录

// Login.vue
methods: {
  async handleLogin() {
    try {
      await this.$store.dispatch('auth/login', {
        username: this.username,
        password: this.password
      })
      const redirect = this.$route.query.redirect || '/'
      this.$router.push(redirect)
    } catch (error) {
      this.error = '登录失败,请检查用户名和密码'
    }
  }
}

记住登录功能实现

添加记住我选项延长Token有效期

<template>
  <input v-model="rememberMe" type="checkbox"> 记住我
</template>

<script>
export default {
  methods: {
    async handleLogin() {
      const response = await this.$store.dispatch('auth/login', {
        username: this.username,
        password: this.password,
        remember: this.rememberMe
      })
      // 后端根据remember参数返回不同有效期的Token
    }
  }
}
</script>

表单验证增强

使用Vuelidate进行表单验证

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

export default {
  validations: {
    username: { required },
    password: { required, minLength: minLength(6) }
  },
  methods: {
    handleLogin() {
      this.$v.$touch()
      if (!this.$v.$invalid) {
        // 提交表单
      }
    }
  }
}

标签: vue
分享给朋友:

相关文章

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 canvas 动态生成水印 在 Vue 组件中通过 canvas 绘制水印,并将其作为背景图片插入到目标元素中。这种方法灵活性高,支持动态调整水印内容、角度和透明度。 &…