当前位置:首页 > 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 集中管理用户登录状态,可以更方便地在组件中访问和修改登录状态。

// 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 是否过期,如果过期则跳转到登录页面:

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 组合函数:

vue实现登录检验

// 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 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除操…

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独立…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现框选

vue实现框选

Vue 实现框选功能 在 Vue 中实现框选功能通常需要监听鼠标事件,计算选区范围,并根据选区范围高亮或选中元素。以下是实现框选功能的关键步骤。 监听鼠标事件 在 Vue 模板中,为容器元素绑定鼠标…