当前位置:首页 > VUE

vue实现登录检验

2026-01-14 04:49:23VUE

Vue 实现登录检验的方法

路由守卫验证登录状态

在 Vue 项目中,可以通过路由守卫(Navigation Guards)来实现登录验证。在 router/index.js 中设置全局前置守卫,检查用户是否已登录。

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 假设使用 localStorage 存储 token
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

在路由配置中为需要登录的页面添加 meta 字段:

{
  path: '/dashboard',
  component: Dashboard,
  meta: { requiresAuth: true }
}

使用 Vuex 管理登录状态

通过 Vuex 集中管理用户登录状态,可以更方便地在组件中访问和修改登录状态。

vue实现登录检验

// store/index.js
export default new Vuex.Store({
  state: {
    isLoggedIn: false,
    user: null
  },
  mutations: {
    login(state, user) {
      state.isLoggedIn = true
      state.user = user
    },
    logout(state) {
      state.isLoggedIn = false
      state.user = null
    }
  }
})

拦截 HTTP 请求添加认证信息

使用 axios 拦截器为每个请求自动添加认证 token:

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

处理 token 过期

在响应拦截器中检查 token 是否过期,如果过期则跳转到登录页面:

vue实现登录检验

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

登录组件实现

在登录组件中处理用户登录逻辑:

methods: {
  async handleLogin() {
    try {
      const response = await login(this.loginForm)
      localStorage.setItem('token', response.data.token)
      this.$store.commit('login', response.data.user)
      this.$router.push('/dashboard')
    } catch (error) {
      console.error('Login failed:', error)
    }
  }
}

退出登录实现

在需要退出登录的地方调用 logout 方法:

methods: {
  logout() {
    localStorage.removeItem('token')
    this.$store.commit('logout')
    this.$router.push('/login')
  }
}

组合式 API 实现

如果使用 Vue 3 的组合式 API,可以封装一个 useAuth 组合函数:

// composables/useAuth.js
import { computed } from 'vue'
import { useStore } from 'vuex'

export function useAuth() {
  const store = useStore()

  const isLoggedIn = computed(() => store.state.isLoggedIn)

  const login = (user) => {
    store.commit('login', user)
  }

  const logout = () => {
    store.commit('logout')
  }

  return { isLoggedIn, login, logout }
}

这些方法可以组合使用,根据项目需求选择合适的实现方式。路由守卫适合页面级别的访问控制,Vuex 适合全局状态管理,axios 拦截器适合 API 请求的认证处理。

标签: vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ { ti…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…