当前位置:首页 > VUE

vue通用登录功能实现

2026-02-23 00:25:51VUE

实现Vue通用登录功能

安装必要依赖

确保项目中已安装axios用于HTTP请求,vue-router用于路由跳转,vuex(可选)用于状态管理:

npm install axios vue-router vuex

创建登录组件

src/components下创建Login.vue文件,包含表单和基础验证:

<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.username" 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 handleSubmit() {
      try {
        const res = await axios.post('/api/login', this.form)
        localStorage.setItem('token', res.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败')
      }
    }
  }
}
</script>

配置路由拦截

src/router/index.js中设置路由守卫,实现未登录跳转:

vue通用登录功能实现

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login'

Vue.use(Router)

const router = new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } }
  ]
})

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

封装API请求

src/utils/request.js中配置axios拦截器,自动附加Token:

import axios from 'axios'

const instance = axios.create({
  baseURL: process.env.VUE_APP_API_URL
})

instance.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
})

export default instance

状态管理(可选)

src/store/index.js中使用Vuex管理登录状态:

vue通用登录功能实现

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: null,
    isAuthenticated: !!localStorage.getItem('token')
  },
  mutations: {
    SET_USER(state, user) {
      state.user = user
      state.isAuthenticated = true
    },
    LOGOUT(state) {
      state.user = null
      state.isAuthenticated = false
    }
  }
})

响应拦截处理

src/utils/request.js中添加响应拦截,处理401未授权:

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

环境变量配置

在项目根目录创建.env文件配置API基础地址:

VUE_APP_API_URL=http://your-api-domain.com

安全注意事项

  • 使用HTTPS协议传输敏感数据
  • 考虑实现CSRF保护机制
  • 敏感操作需进行二次验证
  • 定期清理本地存储的Token
  • 服务端应设置Token过期时间

以上实现可根据具体项目需求进行调整,如添加验证码功能、第三方登录集成等扩展功能。

标签: 功能vue
分享给朋友:

相关文章

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现双击

vue实现双击

Vue 实现双击事件的方法 在Vue中实现双击事件可以通过以下几种方式完成,具体选择取决于项目需求和开发习惯。 使用 @dblclick 指令 Vue提供了内置的@dblclick指令,可以…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…

vue实现html跳页

vue实现html跳页

Vue 实现 HTML 跳页的方法 在 Vue 中实现页面跳转(路由跳转)通常有两种方式:通过 <router-link> 组件或编程式导航。以下是具体实现方法。 使用 <rout…

vue实现盒子平移

vue实现盒子平移

实现盒子平移的方法 在Vue中实现盒子平移可以通过CSS的transform属性结合Vue的动态绑定来完成。以下是几种常见的实现方式: 使用内联样式绑定 通过Vue的v-bind:style或简写:…

vue树形的实现

vue树形的实现

Vue 树形结构的实现方法 递归组件实现 使用 Vue 的递归组件特性可以轻松实现树形结构。定义一个组件,该组件在其模板中调用自身。 <template> <ul>…