vue3使用vue-router及路由权限拦截方式

yizhihongxing

让我为你讲解一下“vue3使用vue-router及路由权限拦截方式”的完整攻略。

1. 安装和配置vue-router

首先需要在项目中安装vue-router。

npm install vue-router

接下来在main.js中配置路由,并将其挂载到Vue实例上:

import { createRouter, createWebHistory } from 'vue-router'
import Home from './views/Home.vue'

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    }
  ]
})

createApp(App)
  .use(router)
  .mount('#app')

2. 路由守卫

路由守卫可以用来拦截导航,从而控制用户访问页面的权限。它主要有3种类型:

  1. 全局守卫
  2. 路由独享守卫
  3. 组件内守卫

在这里,我们将会使用全局守卫来实现路由权限拦截功能。

// 定义路由
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/profile',
      name: 'Profile',
      component: Profile,
      meta: { requiresAuth: true } // 添加meta元数据
    }
  ]
})

// 定义路由守卫
router.beforeEach((to, from, next) => {
  // 判断路由是否需要登录权限
  if (to.meta.requiresAuth) {
    // 判断是否已经登录
    if (isLogin()) {
      next()
    } else {
      next({
        path: '/',
        query: { redirect: to.fullPath }
      })
    }
  } else {
    next()
  }
})

以上代码中,我们给Profile路由添加了一个meta元数据,用来标识该路由需要登录权限。而在路由守卫中,则先判断了当前路由是否需要登录,再判断用户是否已经登录,如果未登录则跳转到登录页面。

3. 示例说明

下面,我们来看看如何使用上述方法来实现路由权限控制。

示例1:登录页面

假设我们的系统有一个登录页面,当用户输入用户名和密码后,如果验证通过,则进入系统功能主页。

// 在登录页面中添加以下逻辑
import { useStore } from 'vuex'

export default {
  name: 'Login',
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    login() {
      // 真正的登录逻辑
      // todo...

      const store = useStore()
      store.commit('login', currentUser) // 将用户信息保存在Vuex中

      if (router.currentRoute.value.query.redirect) {
        this.$router.replace(router.currentRoute.value.query.redirect)
      } else {
        this.$router.push('/')
      }
    }
  }
}

在用户登录成功后,我们将会把用户信息存储在Vuex中,并根据路由参数中的redirect来判断用户需要跳转到哪个页面。

示例2:功能页面

假设我们系统中有一些需要登录才能访问的功能页面,如个人资料页,只有登录后的用户才能访问。

// 在功能页面中添加以下路由表达式
const routes = [
  {
    path: '/profile',
    component: Profile,
    meta: { requiresAuth: true }
  }
]

在路由表达式中,给Profile路由添加requiresAuth=true的元信息,表示该路由需要登录权限。

// 在功能页面中添加以下逻辑代码
import { computed } from 'vue'
import { useStore } from 'vuex'

export default {
  name: 'Profile',

  setup() {
    const store = useStore()

    const currentUser = computed(() => store.getters.currentUser)

    return {
      currentUser
    }
  }
}

在功能页面中,我们从Vuex中获取当前用户信息,并实现了一个简单的computed属性,来判断当前用户是否已经登录。如果用户未登录,则会被路由守卫拦截并跳转到登录页面。

总结

通过以上方法实现了路由权限控制,在用户访问需要登录的页面时,需要经过路由守卫的验证。在Vue3中,可以使用全局守卫来实现路由权限拦截功能,同时把用户信息保存在Vuex中,在需要时从Vuex中读取用户信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3使用vue-router及路由权限拦截方式 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • PHP+mysql+ajax轻量级聊天室实现方法详解

    以下是关于“PHP+mysql+ajax轻量级聊天室实现方法详解”的完整攻略。 简介 本文将讲解如何使用 PHP、MySQL 和 Ajax 技术来创建一个轻量级聊天室。聊天室将支持实时信息交流和历史消息查看。 技术准备 在开始本教程之前,我们需要准备以下技术: PHP 5.x 或更新版本 MySQL 5.x 或更新版本 Apache 或 Nginx Web …

    JavaScript 2023年6月10日
    00
  • JavaScript严格模式

    JavaScript严格模式是一种JavaScript的语言模式,它具有更严格的语法规则和更加安全的行为。使用严格模式可以更早地检测出代码错误,并防止一些常见的JavaScript陷阱。在本文中,我们将深入探讨JavaScript严格模式,介绍它的用法、优势和限制,并提供代码示例。 1.使用严格模式 启用JavaScript严格模式的方法很简单:只需要在代码…

    Web开发基础 2023年3月30日
    00
  • JS正则RegExp.test()使用注意事项(不具有重复性)

    JS正则RegExp.test()使用注意事项(不具有重复性) 在JavaScript中,正则表达式是一种强大的工具,可以用来搜索和替换字符文本。其中,RegExp对象是正则表达式的对象表示法,它提供了很多方法来操作字符串。其中之一便是test()方法。 RegExp.test()方法简介 RegExp.test()方法是一个正则表达式对象的方法,它用来检查…

    JavaScript 2023年6月10日
    00
  • javascript函数命名的三种方式及区别介绍

    对于“javascript函数命名的三种方式及区别介绍”,可以从以下三种方式展开讲解: 第一种方式:函数声明 使用函数声明语句来创建函数,这是最常见的一种函数命名方式,也是最容易理解的方式。 函数声明的基本结构如下: function functionName() { //函数体 } 示例: function greeting() { console.log…

    JavaScript 2023年5月27日
    00
  • JavaScript淡入淡出渐变简单实例

    下面是JavaScript淡入淡出渐变简单实例的详细攻略。 概述 淡入淡出渐变是一种常见的Web界面交互效果,它可以使网页元素在显示和隐藏时呈现出逐渐淡入或淡出的效果,使用户感受更加柔和、自然。而使用JavaScript实现淡入淡出渐变则是一种相对比较简单的实现方式。本文将针对该主题展开详细说明,包括实现过程、示例说明、以及优化方案等。 实现过程 实现淡入淡…

    JavaScript 2023年6月10日
    00
  • 关于base64编码和解码的js工具函数

    下面我将为您详细讲解“关于base64编码和解码的js工具函数”的完整攻略。 什么是Base64编码? Base64是一种用于将二进制数据转换成可打印ASCII字符的编码方式。Base64编码使用64种ASCII字符来表示二进制数据,每三个字节为一组,每组由四个字符表示。 为什么需要Base64编码? 由于许多应用程序只能处理ASCII字符,而不能处理二进制…

    JavaScript 2023年5月19日
    00
  • 非常简单的Ajax请求实例附源码

    非常简单的Ajax请求实例附源码指的是使用Ajax技术实现异步请求后端数据并解析的过程,实现网页无需刷新即可展示新内容或更新信息。下面我们将通过两个示例来详细讲解该攻略。 示例1 首先,我们创建一个包含以下内容的HTML页面,该页面包含了一个文本输入框、一个按钮和用于显示结果的空div: <!DOCTYPE html> <html> …

    JavaScript 2023年6月11日
    00
  • 浅析Bootstrap表格的使用

    浅析Bootstrap表格的使用 Bootstrap是一个流行的前端框架,提供了丰富的组件和样式。表格是一个必不可少的组件,本文将深入浅出地介绍Bootstrap表格的使用,包括如何创建基本表格、添加样式、排序、过滤和分页等。 创建基本表格 在Bootstrap中,我们可以使用<table>元素来创建表格。以下是一个最基本的表格结构: <t…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部