当前位置: 首页 > news >正文

有关若依登录过程前端的对应处理学习

导言

在用C#搞完个后端后想用若依的前端做对接,不过很久没搞过若依了,想趁这个二次开发的过程记录熟悉一下登录的过程

过程

验证,在permission.js的路由守卫,这里在用户发起api请求时会验证用户的请求是否有token,对应访问的权限,并进行相应的拦截和跳转

router.beforeEach((to, from, next) => {NProgress.start()//如果有tokenif (getToken()) {to.meta.title && store.dispatch('settings/setTitle', to.meta.title)/* has token*///如果在登录if (to.path === '/login') {next({ path: '/' })NProgress.done()} else {//不在登录的话根据用户角色动态生成路由表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 {console.log("//如果在登录");next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页NProgress.done()}}
})

 1.获取验证码图片,展示

从登录页面开始先调后端拿验证码图片和从cookie拿到之前保存的用户登录信息

然后在api定义请求后端接口的方法格式与所要传递的参数,这里不需要传token

//在api/login
// 获取验证码  
export function getCodeImg() {return request({url: '/api/Auth/Code',headers: {isToken: false},method: 'get',timeout: 20000})
}

接到后端返回验证码(Base64 编码)后,前端对应显示在页面上

<img :src="codeUrl" @click="getCode" class="login-code-img"/>
...
getCode() {//调用拿验证码getCodeImg().then(res => {console.log(res,",验证码");this.captchaEnabled = res.statusCode === 200 ? true : res.captchaCode;if (this.captchaEnabled) {console.log("进来了",res.data.captchaGUID)this.codeUrl = res.data.captchaCode;this.loginForm.uuid = res.data.captchaGUID;}});},

验证码大概长这样

{"captchaImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
2.登录提交,存token

用户点击提交表单(登录)后前端将所需的东西传回后端验证,具体是先调store中的登录方法,这样好存token

//login.vue
handleLogin() {this.$refs.loginForm.validate(valid => {if (valid) {this.loading = true;if (this.loginForm.rememberMe) {Cookies.set("username", this.loginForm.username, { expires: 30 });Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });} else {Cookies.remove("username");Cookies.remove("password");Cookies.remove('rememberMe');}//调后端登录接口 先是从持久化那调,//然后在那边调完就存token 再把登录成功的信息 传过来this.$store.dispatch("Login", this.loginForm).then(() => {console.log("登录处理成功!");this.$router.push({ path: this.redirect || "/" }).catch(()=>{});}).catch(() => {this.loading = false;if (this.captchaEnabled) {this.getCode();}});}});}
3.用户信息持久化

存完之后在handleLogin最后跳转路由之前会在路由守卫那进到if (store.getters.roles.length === 0),即已经有token和不在登录界面。这时需要用户角色来动态生成路由与存用户的信息,所以还要请求后端拿到用户的详细信息

同理也是先调store中的相应方法,在通过这个来调请求后端的方法

//先调这个 在...src\store\modules\user.js
// 获取用户信息 GetInfo({ commit, state }) {return new Promise((resolve, reject) => {//在这里调请求后端的方法getInfo().then(res => {//成功后做持久化console.log("用户信息:",res);const user = res.dataconst avatar = (user.avatarUrl == "" || user.avatarUrl == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatarUrl;if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组commit('SET_ROLES', res.roles)commit('SET_PERMISSIONS', res.permissions)} else {commit('SET_ROLES', ['ROLE_DEFAULT'])}commit('SET_ID', user.userId)commit('SET_NAME', user.userName)commit('SET_AVATAR', avatar)resolve(res)}).catch(error => {reject(error)})})},
// 获取用户详细信息
export function getInfo() {return request({headers: {isToken: true},url: '/api/Auth/GetUserInfo',method: 'get'})
}
4.生成动态路由菜单

请求后端获得菜单树,在前端根据用户角色(管理员和普通用户)将其转换为菜单

// 生成路由  在src\store\modules\permission.jsGenerateRoutes({ commit }) {return new Promise(resolve => {// 向后端请求路由数据getRouters().then(res => {const sdata = JSON.parse(JSON.stringify(res.data))const rdata = JSON.parse(JSON.stringify(res.data))const sidebarRoutes = filterAsyncRouter(sdata)const rewriteRoutes = filterAsyncRouter(rdata, false, true)const asyncRoutes = filterDynamicRoutes(dynamicRoutes);rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })router.addRoutes(asyncRoutes);commit('SET_ROUTES', rewriteRoutes)commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))commit('SET_DEFAULT_ROUTES', sidebarRoutes)commit('SET_TOPBAR_ROUTES', sidebarRoutes)resolve(rewriteRoutes)})})}

之后路由守卫放行,进到主页..

结语

登录过程不是很复杂,主要就是路由守卫的一系列验证筛选,把不合规范的请求和路由跳转都筛掉了。

正常登录流程大概是验证码图片获取,登录提交,token,用户信息的持久化和菜单生成...

相关文章:

有关若依登录过程前端的对应处理学习

导言 在用C#搞完个后端后想用若依的前端做对接&#xff0c;不过很久没搞过若依了&#xff0c;想趁这个二次开发的过程记录熟悉一下登录的过程 过程 验证&#xff0c;在permission.js的路由守卫&#xff0c;这里在用户发起api请求时会验证用户的请求是否有token&#xff0c;对…...

django使用笔记6--docker部署

django使用笔记--docker部署 多环境配置创建环境变量配置文件静态资源配置dockerfile配置 由于服务器中python版本和依赖与本地开发环境不同&#xff0c;且centOS7中python及依赖安装更新较为麻烦&#xff0c;所以采用docker容器部署 多环境配置 多环境配置类似Spring中的多环…...

高性能、高可靠,MK SD卡让数据存储无忧!

文章目录 SD卡&#xff08;Secure Digital Memory Card&#xff09;&#xff0c;作为当代数字生活中不可或缺的存储媒介&#xff0c;凭借其卓越的数据传输效率、灵活的热插拔功能以及惊人的存储容量&#xff0c;在多个领域大放异彩。从日常使用的智能手机、平板电脑到追求极致体…...

NetAssist测试TCP和UDP

由于在Windows下经常使用NetAssist.exe这款网络调试工具进行TCP、UDP的服务端、客户端的监听&#xff0c;对于需要编写各种通信协议的TCP服务端、客户端以及UDP通信程序来说是很方便的。下载地址&#xff1a;http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.14.…...

mcuboot使用介绍

准备工作 硬件平台选择 确保你的微控制器单元&#xff08;MCU&#xff09;是 MCUboot 所支持的类型。查看 MCUboot 的文档或官方支持列表&#xff0c;了解其兼容的 MCU 系列和硬件平台。根据硬件平台的设计&#xff0c;将微控制器与相关的外设&#xff08;如闪存、通信接口等&a…...

如何在 Linux 终端使用 GET 和 POST 请求

文章目录 1、GET请求基本请求带有请求头带有参数将响应保存成文件 2、POST请求基本请求发送JSON格式的POST请求体使用文件作为POST请求体使用时注意 1、GET请求 基本请求 在Linux中&#xff0c;发送GET请求通常使用 curl 命令&#xff0c;curl 的默认行为就是发送GET请求&…...

主从数据库同步配置详解(MySQL/MariaDB)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、环境准备与安装配置本地部署MySQLUbuntu 系统&#xff1a;CentOS 系统&#xff1a; MariaDBUbuntu 系统&#xff1a;CentOS 系统&#xff1a; 容器部署MySQ…...

台式机通过笔记本上网

概述: ①将wifi共享给网口 ②网口配置成自协商IP和DNS即可 一、背景 由于台式机只有网口&#xff0c;没得wifi网卡&#xff0c;因此想通过笔记本连wifi,再通过网线将笔记本和台式机连接起来&#xff0c;从而实现台式机通过笔记本的wifi上网&#xff0c;即让笔记本当台式机的…...

golang雪花算法实现64位的ID

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

LeetCode 137. 只出现一次的数字 II

LeetCode 137. 只出现一次的数字 II 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a;…...

新书推荐——《深度学习精粹与PyTorch实践》

深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制&#xff0c;是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。 本书旨在通过深入浅出的方式&#xff0c;为你揭示这些原理&#xff0c;让你在理解和解释…...

Docker:解决开发运维问题的开源容器化平台

云计算de小白 Docker是一个开源的容器化平台&#xff0c;可以将应用程序及其依赖的环境打包成轻量级、可移植的容器。 Docker为什么这么受欢迎呢?原因很简单&#xff1a;Docker可以解决不同环境一致运行的问题&#xff0c;而且占用资源少&#xff0c;速度快。 所以好的东西…...

多线程计算π

1、实现单线程计算π 2、使用任务分解方法,使用2线程,并行计算π 3、使用数据分解方法,使用2线程,并行计算π 注意:在循环中使用以上计算π的公式,n取值为1到Int.Max 问题1: import java.lang.*;public class Thread1 extends Thread{@Overridepublic void run(){l…...

JAVA开源项目 足球俱乐部管理后台 计算机毕业设计

博主说明&#xff1a;本文项目编号 T 051 &#xff0c;文末自助获取源码 \color{red}{T051&#xff0c;文末自助获取源码} T051&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

Arthas memory(查看 JVM 内存信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09;举例1&#xff1a;查看 JVM 内存信息 二、命令列表 2.1 jvm相关命令 2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09; 基本用法&#xff1a; memory 举例1&#xff1a;…...

C#车辆登记证识别API接口集成示例-车辆合格证识别免费的API接口

车辆登记证识别接口是一种OCR技术&#xff0c;基于深度学习算法&#xff0c;可快速、精准、自动识别车辆登记证上的文字信息。目前&#xff0c;车辆合格证识别的应用场景主要集中在与车辆相关的各类业务流程中&#xff0c;特别是汽车行业、物流运输和车辆管理等领域。 1.汽车销…...

学习笔记每日一题

给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] "Fizz…...

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器

各位同仁&#xff0c;随着人工智能浪潮的汹涌澎湃&#xff0c;我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代&#xff0c;我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们&#xff0c;对计算力的渴望如同对知识的追求一般&#xff0c;永无…...

论JAVA 两种“对象比较接口“的区别

前言 总所周知,java对象的比较有 三种方式 最简单的是可以调用equals(). 因为这个方法定义在Object类中&#xff0c;而我们的类都继承了Object类.所以我们自己定义的类都可以使用这个方法. 除此以外还有两个比较接口,可以通过实现他们的某些方法比较我们的对象 他们是 Com…...

在线代理提取IP:一文详解其含义和应用

在互联网时代&#xff0c;IP地址就像是每台设备的“身份证”。然而&#xff0c;有时候&#xff0c;我们需要隐藏或更改这个“身份证”&#xff0c;这时候&#xff0c;代理IP就派上了用场。那么&#xff0c;在线代理提取IP究竟是什么意思呢&#xff1f;让我们一起来探讨一下。 …...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...