登录解析(前端)

登录代码

1、登录之后做了什么?

执行登陆方法,成功之后,路由跳转到指定路径或者根目录

2、this.$store.dispatch是什么意思?

this.$store.dispatch(‘Login’, this.loginForm)
来调取store里的user.js的login方法

3、this.$router.push又是什么意思?

//修改 url,完成跳转
//push 后面可以是对象,也可以是字符串
// 字符串
this.$router.push('/home/first')
// 对象
this.$router.push({ path: '/home/first' })
// 命名的路由
this.$router.push({ name: 'home', params: { userId: wise }})

4、进入路由导航守卫

src\permission.js

to: 即将要进入的目标 用一种标准化的方式

from: 当前导航正要离开的路由 用一种标准化的方式

next: 进入指定的地址

进入 全局前置守卫 router.beforeEach

next({ path: ‘/’ }) 中的 ‘/’ 等于 src\router\index.js 中 path: ‘/’ 或 path: ‘’ 的路由信息

import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'
import { isRelogin } from '@/utils/request'NProgress.configure({ showSpinner: false })//白名单
const whiteList = ['/login', '/register']router.beforeEach((to, from, next) => {NProgress.start()//判断是否存在tokenif (getToken()) {// console.log("getToken():"+getToken())to.meta.title && store.dispatch('settings/setTitle', to.meta.title)/* has token*///当前地址 是login 登录 则跳转到默认路由if (to.path === '/login') {next({ path: '/' })NProgress.done()} else {// console.log("store.getters.roles:"+store.getters.roles)if (store.getters.roles.length === 0) {isRelogin.show = true// 判断当前用户是否已拉取完user_info信息store.dispatch('GetInfo').then(() => {isRelogin.show = falsestore.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})}).catch(err => {store.dispatch('LogOut').then(() => {Message.error(err)next({ path: '/' })})})} else {next()}}} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页NProgress.done()}}
})router.afterEach(() => {NProgress.done()
})

登录流程

  1. 已知vue项目启动入口为 src\App.vue ,在 App.vue 中的 默认会获取 src\router\index.js中为
    path: ‘/’path: ‘’ 的路由信息

  2. 在当前项目中默认路由为

export const constantRoutes = [
{path: '',component: Layout,redirect: 'index',children: [{path: 'index',component: () => import('@/views/index'),name: 'Index',meta: { title: '首页', icon: 'dashboard', affix: true }}]},
]
  1. 然后进入 src\permission.js 中进行路由跳转,进入 全局前置守卫 router.beforeEach后,判断是否存在token

  2. 存在token 进入地址验证,如果是从登录页过来的则将进入用户信息和路由信息的获取,
    获取完成后 动态组装路由 ,组装完成后进入 默认页面(index.vue)

  • store.dispatch(‘GetInfo’) 会进入 src\store\modules\user.js 中的 GetInfo 方法获取用户信息角色信息等存储到vuex中
 store.dispatch('GetInfo').then(() => {isRelogin.show = falsestore.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})})
  • store.dispatch(‘GenerateRoutes’) 进入 src\store\modules\permission.js
    中的 GenerateRoutes 方法获取用户路由数据并通过router.addRoutes 添加到路由管理
 store.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})
  1. 如果不存在token则判断是不是进入路由白名单中的地址,如果不是则重定向至登录页,注意重定向后登录页的地址
    http://localhost/login ?redirect=%2Findex
    其中 %2Findex = /index 只是被浏览器转义了

  2. 基于以上登录后会进入/index页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive:transform和udf

工作中发现有时候会用到python脚本进行数据计算,但是现在貌似已经不这样再处理,一般使用封装好的udf函数。 transform的基本用法为: transform中的值作为输入, 然后传递给python脚本,最后经过python的处理后&#xf…

将MySQL数据库导入到EA模型的教程

将MySQL数据库导入到EA 1.下载安装mysql-connector-odbc2.在管理工具中新增ODBC数据源3.在EA中新建项目4.链接MYSQL数据源4.1 安装64位的ODBC驱动可能出现”在连接ODBC 时发生错误,请相关检查设置“的提示,卸载后重新安装32位ODBC驱动后可以正常执行 5.导…

vue纯前端实现表格分页及条件查询功能

由于接口返回数据过慢&#xff0c;故而采用前端对数据进行处理分页的方法实现表格分页及条件查询。 一、表格 表格采用elementUI的el-table&#xff0c;只需要对数据data进行处理赋值即可。 <el-table:data"tableData"style"width: 100%"><el-t…

智慧园区引领产业智能化升级:科技创新驱动打造智慧化、高效化产业新未来

随着全球科技革命的深入推进&#xff0c;以大数据、云计算、物联网、人工智能等为代表的新一代信息技术正深刻改变着传统产业的发展模式。在这一背景下&#xff0c;智慧园区作为产业智能化升级的重要载体和平台&#xff0c;正以其前瞻性的规划、创新的科技和卓越的实践&#xf…

tencentcloud-sdk-python-iotexplorer、tencent-iot-device、cos-python-sdk-v5有什么用

1. tencent-iot-device tencent-iot-device 是腾讯云提供的物联网设备 SDK&#xff0c;用于在物联网场景中开发和连接设备。这个 SDK 提供了丰富的功能和接口&#xff0c;可以帮助开发者快速构建稳定、高效的物联网应用。 主要功能和特点&#xff1a; 设备连接管理&#xff1…

OpenCV杂记(2):图像拼接(hconcat, vconcat)

OpenCV杂记&#xff08;1&#xff09;&#xff1a;绘制OSD&#xff08;cv::getTextSize, cv::putText&#xff09;https://blog.csdn.net/tecsai/article/details/137872058 1. 简述 做图像处理或计算机视觉技术的同学都知道&#xff0c;我们在工作中会经常遇到需要将两幅图像拼…

Windows之一些常用命令

在 Windows 操作系统上&#xff0c;你可以使用命令行来创建新的文件。以下是几种常用的方法&#xff1a; 使用 echo 命令创建文件&#xff1a; echo. > filename.ext将 filename.ext 替换为你想要创建的文件名和扩展名。例如&#xff0c;要创建一个名为 example.txt 的文本…

IntelliJ-platform plugIn 插件开发专题内容介绍,学习指导(一)

这系列文章出炉对于笔者来说确实不容易&#xff0c;历时快两年了&#xff0c;先后迭代了3版本&#xff0c;暂时与官方最新版本API同步&#xff08;2024.03&#xff09;&#xff0c;文章内容覆盖2022~2024版内容 专题由来 最早接触插件开发是源于公司一个国际化项目&#xff0c…

以pytorch pipeline并行为例,分析各kernel的耗时占比及性能瓶颈

以pytorch pipeline并行为例,分析各kernel的耗时占比及性能瓶颈 1.生成pipeline并行的测试代码2.pipeline profing3.生成nsys2json.py代码4.将nsys sqlite格式转chrome json格式5.生成耗时成分统计代码6.统计耗时成分7.耗时成分如下:8.查看GPU PCIE链路状态9.链路状态如下10.Ns…

js高级 笔记01

01 静态成员和实例成员 构造函数中的属性和方法我们称之为成员 成员是可以添加的 通过构造函数new出来的对象叫做实例化对象 实例成员就是构造函数内部通过this添加的对象 实例成员只能通过实例化对象去访问 不能通过构造函数去访问 静态成员 是在构造函数本身上添加的…

【Xilnx FPGA】 ubuntu20.04 vivado 和vitis找不到zynq设备

参考如何下&#xff0c;ubuntu下需要手动安装驱动&#xff0c;在安装目录下执行sudo ./install_drivers Install Cable Drivers (Linux Only) - Digilent Referencehttps://www.xilinx.com/support/documentation/user_guides/ug344.pdfAMD Customer Community $(DIR)Vivado/…

若依框架在企业级应用开发中的核心作用

随着互联网技术的飞速发展&#xff0c;企业级应用开发面临着日益复杂的需求与挑战。在这样的背景下&#xff0c;高效、稳定且易于维护的开发框架显得尤为重要。其中&#xff0c;若依&#xff08;RuoYi&#xff09;作为一款备受开发者青睐的Java快速开发平台&#xff0c;以其强大…

Unity地形关联出错的解决办法以及地形深度拷贝

问题 最近发现unity地形系统的一个bug&#xff0c;导入的场景地形数据关联错乱了&#xff0c;关联到别的场景的地形数据了&#xff0c;meta替换了也没用&#xff0c;不清楚它具体是怎么关联的。 看下面的案例&#xff1a; 可以看到正常这个场景的地形数据应该关联的是Scene_E…

自动驾驶---低速场景之记忆泊车

1 背景 随着笔者行车功能Planning模块第一阶段的内容基本完结,后续主要针对Planning模块的细节,补充知识,其它模块或者低速功能作介绍。因此和大家先聊一聊低速场景下的记忆泊车,如此一来,整体覆盖了点到点自动驾驶的所有环节。 最开始量产记忆泊车(Auto Valet Paking)的…

重要的事说100遍

直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大面积修改生产数据库数据先备份! 直接用SQL大…

gma 2 用户文档(pdf版)更新计划

随着 gma 2 整体构建完成&#xff0c;下一步继续针对库内所有功能完成一个用户指南&#xff08;非网站&#xff09;。相较于上次更新用户文档pdf版&#xff0c;已经过去了大半年。当然&#xff0c;PDF 版比网站上内容更丰富&#xff0c;也更新&#xff08;文档基于 gma 2.0.9a2…

【Java】集合概念及多线程

HashSet 、 LinkedHashSet 和 TreeSet 的主要区别在于底层数据结构不同。 HashSet 的底层数据结构是哈希表&#xff08;基于 HashMap 实现&#xff09;。 LinkedHashSet 的底层数据结构是链表和哈希表&#xff0c;元素的插⼊和取出顺序满⾜ FIFO。 TreeSet 底层数据结构是红…

node之初始化一个环境

react Remix Docs 指定 npm 的全局安装目录 在 npm 中&#xff0c;你可以使用 prefix 命令来指定全局安装的目录路径。以下是如何进行设置的步骤&#xff1a; 打开命令提示符或终端。 运行以下命令&#xff0c;将全局安装目录设置为你想要的路径&#xff08;例如&#xff0…

Linux系统下使用Parted调整物理分区大小

前言 在管理Linux系统时&#xff0c;有时需要对物理分区大小进行调整以满足不断变化的需求。Parted是一款功能强大的分区管理工具&#xff0c;可以帮助您轻松地进行这项任务。本文将简要介绍如何使用Parted来调整物理分区大小&#xff0c;让您能够快速且安全地完成这一操作。 …

【前端】4. CSS综合案例

1. 模拟新闻界面 <!-- 1.模拟实现新闻界面 --><!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…