当前位置:首页 > VUE

vue实现登录跳转

2026-02-20 11:19:29VUE

实现登录跳转的基本流程

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

创建登录页面组件

新建一个Login.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):

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处理:

vue实现登录跳转

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 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双向…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…