当前位置:首页 > VUE

vue 实现登录退出

2026-03-28 16:16:22VUE

实现登录功能

使用 Vue 和 Vuex 管理登录状态,结合路由守卫控制访问权限。

  1. 创建登录表单组件
    Login.vue 中设置用户名和密码输入框,绑定到 data 属性:
    
    <template>
    <form @submit.prevent="handleLogin">
     <input v-model="username" type="text" placeholder="用户名">
     <input v-model="password" type="password" placeholder="密码">
     <button type="submit">登录</button>
    </form>
    </template>
export default { data() { return { username: '', password: '' } } } ```
  1. 添加登录方法
    调用 API 并提交凭证到后端:
    methods: {
    async handleLogin() {
     try {
       const response = await axios.post('/api/login', {
         username: this.username,
         password: this.password
       })
       this.$store.commit('SET_TOKEN', response.data.token)
       this.$router.push('/dashboard')
     } catch (error) {
       alert('登录失败')
     }
    }
    }

实现状态管理

在 Vuex store 中管理用户认证状态:

  1. 创建 auth 模块
    store/modules/auth.js 中定义状态和 mutations:
    
    const state = {
    token: localStorage.getItem('token') || '',
    user: null
    }

const mutations = { SET_TOKEN(state, token) { state.token = token localStorage.setItem('token', token) }, CLEAR_AUTH(state) { state.token = '' state.user = null localStorage.removeItem('token') } }

export default { namespaced: true, state, mutations }


### 实现路由守卫

在路由配置中添加全局前置守卫:

1. 配置路由守卫  
在 `router/index.js` 中检查认证状态:
```javascript
router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.auth.token
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !isAuthenticated) {
    next('/login')
  } else if ((to.path === '/login' || to.path === '/register') && isAuthenticated) {
    next('/dashboard')
  } else {
    next()
  }
})

实现退出功能

创建退出方法清除认证信息:

  1. 添加退出按钮
    在导航组件中添加退出按钮:

    <button @click="handleLogout">退出登录</button>
  2. 实现退出方法
    调用 Vuex mutation 清除状态:

    methods: {
    handleLogout() {
     this.$store.commit('auth/CLEAR_AUTH')
     this.$router.push('/login')
    }
    }

补充说明

  1. 持久化 token
    通过 localStorage 实现 token 持久化,避免页面刷新后需要重新登录。

  2. 请求拦截器
    axios 请求拦截器中自动添加认证头:

    axios.interceptors.request.use(config => {
    const token = store.state.auth.token
    if (token) {
     config.headers.Authorization = `Bearer ${token}`
    }
    return config
    })
  3. 响应拦截器
    处理 token 过期情况:

    vue 实现登录退出

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

标签: vue
分享给朋友:

相关文章

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue 实现弹幕

vue 实现弹幕

vue 实现弹幕的方法 使用 CSS 动画和动态渲染 在 Vue 中实现弹幕效果,可以通过动态渲染弹幕元素并结合 CSS 动画实现。以下是具体步骤: 数据准备 创建一个数组存储弹幕数据,每条弹幕包…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…