当前位置:首页 > VUE

vue实现登录跳转

2026-02-20 11:19:29VUE

实现登录跳转的基本流程

在Vue中实现登录跳转通常涉及路由守卫、状态管理和接口请求。以下是具体实现方法:

创建登录页面组件

新建一个Login.vue组件,包含表单和提交逻辑:

vue实现登录跳转

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="username" placeholder="用户名"/>
    <input v-model="password" type="password" placeholder="密码"/>
    <button type="submit">登录</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        })
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error('登录失败', error)
      }
    }
  }
}
</script>

配置路由守卫

在router/index.js中添加全局前置守卫:

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/Login.vue'
import Dashboard from '@/views/Dashboard.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } }
  ]
})

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

export default router

状态管理集成

在Vuex中管理用户状态(store/modules/auth.js):

vue实现登录跳转

const state = {
  user: null,
  token: localStorage.getItem('token') || null
}

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

const actions = {
  async login({ commit }, credentials) {
    const response = await axios.post('/api/login', credentials)
    commit('SET_TOKEN', response.data.token)
    commit('SET_USER', response.data.user)
    return response.data
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

登录后跳转处理

在登录组件中调用Vuex action:

methods: {
  async handleLogin() {
    try {
      await this.$store.dispatch('auth/login', {
        username: this.username,
        password: this.password
      })
      const redirectPath = this.$route.query.redirect || '/dashboard'
      this.$router.push(redirectPath)
    } catch (error) {
      this.error = '登录失败,请检查凭证'
    }
  }
}

响应拦截处理

在axios拦截器中添加401处理:

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

注意事项

  1. 生产环境应使用HTTP-only的cookie存储token
  2. 密码传输必须使用HTTPS加密
  3. 实现CSRF保护机制
  4. 添加表单验证逻辑
  5. 考虑实现记住我功能
  6. 登录成功后清除原路由的redirect参数

以上实现方案可根据具体项目需求进行调整,核心思路是通过路由守卫控制访问权限,结合状态管理维护用户会话状态。

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

相关文章

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue ref实现

vue ref实现

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

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

vue for实现

vue for实现

Vue 中的 v-for 指令 v-for 是 Vue.js 中用于渲染列表数据的核心指令,通过遍历数组或对象生成动态内容。 基本语法(数组) <ul> <li v-for…

vue实现书库

vue实现书库

Vue 实现书库功能 使用 Vue 构建书库功能需要结合前端框架和后端数据管理。以下是实现步骤和关键点: 项目初始化 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 和状…