当前位置:首页 > VUE

vue如何实现登录失效

2026-01-21 07:18:38VUE

Vue 实现登录失效处理

使用 axios 拦截器检测登录失效

在 axios 的响应拦截器中检查返回状态码,当检测到 401 未授权状态时跳转到登录页。

// axios 拦截器配置
import axios from 'axios'
import router from './router'

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

结合路由守卫进行全局验证

在路由全局前置守卫中检查用户登录状态,当 token 失效时重定向到登录页面。

// router.js
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!localStorage.getItem('token')) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

定时检查 token 有效性

设置定时器定期检查 token 是否即将过期,提前刷新或提示用户重新登录。

vue如何实现登录失效

// token 检查函数
function checkTokenExpiration() {
  const token = localStorage.getItem('token')
  const expiresAt = localStorage.getItem('expires_at')

  if (!token || new Date().getTime() > expiresAt) {
    localStorage.removeItem('token')
    localStorage.removeItem('expires_at')
    router.push('/login')
  }
}

// 每5分钟检查一次
setInterval(checkTokenExpiration, 300000)

后端配合返回明确状态

确保后端 API 在 token 失效时返回明确的 401 状态码,前端根据该状态码进行统一处理。

用户友好的提示信息

当检测到登录失效时,显示友好的提示信息而非直接跳转。

vue如何实现登录失效

// 使用 Element UI 提示
import { Message } from 'element-ui'

if (error.response.status === 401) {
  Message.error('登录已过期,请重新登录')
  router.push('/login')
}

自动刷新 token 机制

在 token 即将过期时自动刷新,避免频繁要求用户重新登录。

// token 刷新逻辑
function refreshToken() {
  return axios.post('/auth/refresh', {
    refresh_token: localStorage.getItem('refresh_token')
  }).then(response => {
    localStorage.setItem('token', response.data.token)
    localStorage.setItem('expires_at', response.data.expires_at)
  })
}

登出时清理数据

用户主动登出或检测到登录失效时,清理本地存储的认证信息。

function logout() {
  localStorage.removeItem('token')
  localStorage.removeItem('refresh_token')
  localStorage.removeItem('expires_at')
  router.push('/login')
}

标签: 如何实现vue
分享给朋友:

相关文章

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterva…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.d…

vue实现slot

vue实现slot

Vue 中的 Slot 实现方法 Vue 的 slot 是一种内容分发机制,允许父组件向子组件插入内容。以下是几种常见的 Slot 实现方式: 默认 Slot 子组件通过 <slot>…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactiv…