当前位置:首页 > 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中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginatedD…

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue C…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…