当前位置:首页 > VUE

vue实现登录判断

2026-02-19 07:13:37VUE

Vue 实现登录判断

在 Vue 中实现登录判断通常涉及以下几个关键步骤:

使用 Vue Router 进行路由守卫

通过 Vue Router 的导航守卫(beforeEach)可以拦截路由跳转,检查用户是否已登录。若未登录,则重定向到登录页面。

// router/index.js
import router from './router'

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 检查本地存储的 token
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login') // 跳转到登录页
  } else {
    next() // 放行
  }
})

登录状态管理

推荐使用 Vuex 集中管理登录状态,避免分散的逻辑判断。

// store/index.js
const store = new Vuex.Store({
  state: {
    isLoggedIn: false,
    user: null
  },
  mutations: {
    login(state, userData) {
      state.isLoggedIn = true
      state.user = userData
      localStorage.setItem('token', userData.token) // 存储 token
    },
    logout(state) {
      state.isLoggedIn = false
      state.user = null
      localStorage.removeItem('token') // 清除 token
    }
  }
})

登录逻辑实现

在登录组件中调用 Vuex 的登录方法,并处理接口返回的认证信息。

// Login.vue
methods: {
  async handleLogin() {
    try {
      const response = await axios.post('/api/login', {
        username: this.username,
        password: this.password
      })
      this.$store.commit('login', response.data) // 提交到 Vuex
      this.$router.push('/dashboard') // 跳转到主页
    } catch (error) {
      console.error('登录失败:', error)
    }
  }
}

全局状态检查

在根组件(如 App.vue)的 created 钩子中检查初始登录状态,避免页面刷新后状态丢失。

// App.vue
created() {
  const token = localStorage.getItem('token')
  if (token) {
    this.$store.commit('login', { token }) // 恢复登录状态
  }
}

动态显示登录相关 UI

根据登录状态动态显示导航栏内容,例如显示“登录”或“用户信息”。

<template>
  <div v-if="$store.state.isLoggedIn">
    <span>欢迎, {{ $store.state.user.name }}</span>
    <button @click="logout">退出</button>
  </div>
  <div v-else>
    <router-link to="/login">登录</router-link>
  </div>
</template>

接口请求拦截

在 Axios 拦截器中自动添加认证 Token,并在 Token 失效时跳转登录页。

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

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

vue实现登录判断

标签: vue
分享给朋友:

相关文章

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的d…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 29…

vue实现定位

vue实现定位

Vue 中实现定位的方法 在 Vue 中实现定位可以通过以下几种方式: 使用 CSS 定位 通过 CSS 的 position 属性实现定位,Vue 中可以直接在组件的 <style>…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…