当前位置:首页 > VUE

vue 实现登录跳转

2026-01-08 13:17:49VUE

实现登录跳转的核心逻辑

在Vue中实现登录跳转通常涉及路由守卫、状态管理和API交互。以下是具体实现方式:

配置路由守卫

在路由配置文件中添加beforeEach守卫,检查用户是否已登录。未登录时重定向到登录页:

// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'

Vue.use(Router)

const router = new Router({
  routes: [...]
})

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.getters.isAuthenticated
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

创建登录组件

构建包含表单提交逻辑的登录组件,成功登录后跳转到目标页面:

vue 实现登录跳转

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="username" type="text" placeholder="Username">
    <input v-model="password" type="password" placeholder="Password">
    <button type="submit">Login</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        await this.$store.dispatch('login', {
          username: this.username,
          password: this.password
        })
        this.$router.push(this.$route.query.redirect || '/dashboard')
      } catch (error) {
        alert('Login failed')
      }
    }
  }
}
</script>

设置Vuex状态管理

通过Vuex存储登录状态和用户信息:

// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: null,
    token: null
  },
  getters: {
    isAuthenticated: state => !!state.token
  },
  mutations: {
    SET_USER(state, { user, token }) {
      state.user = user
      state.token = token
    }
  },
  actions: {
    async login({ commit }, credentials) {
      const response = await api.post('/login', credentials)
      commit('SET_USER', response.data)
    }
  }
})

处理带重定向的登录链接

在需要登录的页面跳转时,携带原始路径参数:

vue 实现登录跳转

// 在需要权限的组件中
this.$router.push({
  path: '/login',
  query: { redirect: this.$route.fullPath }
})

持久化登录状态

使用localStoragecookie保持登录状态:

// 在Vuex mutations中添加持久化逻辑
mutations: {
  SET_USER(state, { user, token }) {
    state.user = user
    state.token = token
    localStorage.setItem('authToken', token)
  },
  INIT_STATE(state) {
    state.token = localStorage.getItem('authToken')
  }
}

// 在应用初始化时调用
store.commit('INIT_STATE')

实现注销功能

清除状态并重定向到登录页:

methods: {
  logout() {
    this.$store.commit('SET_USER', { user: null, token: null })
    localStorage.removeItem('authToken')
    this.$router.push('/login')
  }
}

标签: 跳转vue
分享给朋友:

相关文章

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现双折线图

vue实现双折线图

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

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <t…