VUE |“ 登录页面”的权限以及接口问题

news/2024/4/28 23:28:21/文章来源:https://blog.csdn.net/m0_72383454/article/details/127528456

目录

一、功能需求 

二、前提准备 

三、具体实现 


一、功能需求 

今天写到项目的登录页面,我这边是没有后台数据接口的,所以我们用了Mock模拟了一个假的数据,那么我们应该怎么实现呢?我们先来看一下功能需要。

  1. 当我们退出登录时,页面会跳转到login页面
  2. 即使我们在地址栏手动改变路径,也无法跳转到我们的home页面
  3. 在登录框里,我们只有输入正确的账号和密码,我们才可以进入到home页面。

二、前提准备 

所以我们怎样给我们的系统添加一个用户权限呢?在这里,我们会介绍一个新的概念——token。它本身就是一个字符串,我们通过它进行一个权限的判断;那在什么时候生成呢?在我们输入完用户名和密码时,点击【登录】时,会调用一个登录的一个接口,然后后端会返回一个token过来,然后我们在进入页面之后,我们在调用具体的接口的时候,我们就把这个token作为请求的请求头,后端就会从请求头里获取到token中的信息,后面后端就会进行一个信息的验证,判断我们当前的用户是否的合法等等权限的判断。

 首先,我们后台存储token,我是用到了第三方库  【Cookie】;并且提前准备好了我们后面需要用到的数据(permission.js),在mock.js中写好接口:

 index.js中的接口:


三、具体实现 

 Login.vue:

登录框逻辑:

<template><el-form ref="form" label-width="70px" class="form_contain" :model="form" :rules="rules" :inline='true'><h3 class="login_title">系统登录</h3><el-form-item label="用户名" prop="username"><el-input  v-model="form.username" placeholder="请输入账号"></el-input></el-form-item><el-form-item label="密码" prop="password"><el-input type="password"  v-model="form.password" placeholder="请输入密码"></el-input></el-form-item><el-form-item><el-button @click='submit'  class="but" type="primary" >登录</el-button></el-form-item></el-form>
</template><script>
import Cookie from 'js-cookie'
import {getMenu} from '../api/index'
export default {name:'Login',data(){return{form:{username:'',password:''},rules:{username:[{required:true,trigger:'blur',message:'请输入账号'}],password:[{required:true,trigger:'blur',message:'请输入密码'}]}}},methods:{ submit(){// token信息// 校验数据this.$refs.form.validate((valid)=>{if(valid){ getMenu(this.form).then(({data})=>{if(data.code === 20000){const token = data.data.tokenCookie.set('token',token)this.$router.push('/home')}else{this.$message.error(data.data.message)}})}})},} }
</script>

登录框的结构如上,我们对这个form通过validata方法进行数据校验,当校验成功时,会有一个成功的回调函数,在这个回调函数里,调用getMenu接口,把form的数据传给后台进行username和password的一个判断,当用户名和密码都正确时,data中的code===20000,代表请求成功,然后就可以把请求成功的数据中的token存入Cookie中,然后路由跳转到首页。

路由守卫逻辑:

我们的登录框的路由跳转逻辑我们实现好了,我们再来回顾一下我们一开始说的功能需求。我们说,即使我们在地址栏手动改变路径,也无法跳转路径,这是怎么实现的呢?其实这个就涉及到了【路由守卫】。

// 添加全局前置路由守卫
router.beforeEach((to,from,next)=>{// 读取tokenconst token = Cookie.get('token')// 判断token存不存在// 如果token不存在,说明当前用户未登录,并且当前页面不是login,应该跳转至登录页if(!token && to.name !== 'login'){next({name:'login'})// token存在,并且当前页面是login,应该跳转至首页}else if(token && to.name ==='login'){next({name:'home'})}else{next()}
})

退出登录逻辑:

如果是按照平常的逻辑来看,我们肯定是给【退出】按钮绑定一个事件,当点击它时,删除token,然后路由回转到login~

一切看上去都是那么的完美,但是这样是完全没有用的,那么我们应该怎么实现呢?

我们的【退出】按钮在header.vue组件的【el-dropdown】里,它有一个【command】的事件,我们要给【el-dropdown】绑定【command】事件,并且【el-dropdown】里的【Dropdown Menu Item】 有一个属性command,我们要对这个属性进行判断。

HTML:

     <el-dropdown @command="handelOut"><span class="el-dropdown-link"><img src="../assets/images/user.jpg" class="user" /></span><el-dropdown-menu slot="dropdown"><el-dropdown-item>个人中心</el-dropdown-item><el-dropdown-item command="loginOut">退出</el-dropdown-item></el-dropdown-menu></el-dropdown>

JS:

 methods: {handleMenu() {this.$store.commit("COLLAPSE_MENU");},handelOut(command) {if (command == "loginOut") {Cookie.remove("token");this.$router.push('/login')}},},

当我们点击【退出】按钮时,判断command中的值是否是“loginOut”,是的话代表当前的【el-dropdown-item】为退出,即执行路由跳转。

好啦好啦,今天的登录页面就说到这里,后面有需要补充的我也会发博文出来,希望对大家有点帮助!

拜比~

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

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

相关文章

系分 - 系统可靠性分析与设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 系分 - 系统可靠性分析与设计 考点摘要 可靠性相关基本概念&#xff08;★&#xff09;系统可靠性分析&#xff08;★★&#xff09;软件可靠性设计&#xff08;★★&#xff09; 系统故障类型 系统故障是指由…

09代码

实例1 def division():print(\n==========分苹果了===========\n)apple=int(input(请输入苹果的个数))children=int(input(请输入来了多少个小朋友))result=apple//childrenremain=apple-result*childrenif remain>0:print(apple,个苹果,平均分给,children,个小朋友,每人分…

网络爬虫及openyxl模块

网络爬虫及openyxl模块 一、第三方模块简介 1.第三方模块的用处python之所以在这么多的编程语言中脱颖而出的优点是有众多的第三方库函数,可以更高效率的实现开发2.第三方模块的使用 1.第三方模块必须下载才能使用格式:pip install 模块名 -i 源地址清华大学 :https://pypi.…

【cuda编程】CUDA的运行方式以及grid、block结构关系

文章目录1. CUDA基础知识1.1 程序基本运行顺序1.2 grid与block1.3 dim类型定义2. CUDA的第一个程序3. CUDA线程的组织结构——grid与block关系1. CUDA基础知识 1.1 程序基本运行顺序 一般来说&#xff0c;一个cpugpu的程序运行如下所示&#xff1a; 1.2 grid与block 从GPU至…

网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理

JavaEE传送门JavaEE 网络原理——No.2 传输层_TCP的连接管理 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 目录延迟应答捎带应答面向字节流粘包问题TCP 中的异常处理(连接异常)TCP 和 UDP 的应用场景延迟应答 一种提高传输效率的机制, 又是基于流量控制, 来引…

调度线程池ScheduledThreadPoolExecutor源码解析

实现机制分析 我们先思考下&#xff0c;如果让大家去实现ScheduledThreadPoolExecutor可以周期性执行任务的功能&#xff0c;需要考虑哪些方面呢&#xff1f; ScheduledThreadPoolExecutor的整体实现思路是什么呢&#xff1f; 答&#xff1a; 我们是不是可以继承线程池类&am…

docker快速安装redis

一.背景 开发环境中&#xff0c;经常需要redis本地环境&#xff0c;方便开发。准备在本机的虚拟机里面准备一个redis环境。 二.版本信息 操作系统&#xff1a;Windows 10 家庭版 Oracle VM VirtualBox&#xff1a;版本 6.0.10 r132072 (Qt5.6.2) Ubuntu:16.04.6-desktop-a…

STM32CubeMX学习笔记(44)——USB接口使用(HID按键)

一、USB简介 USB&#xff08;Universal Serial BUS&#xff09;通用串行总线&#xff0c;是一个外部总线标准&#xff0c;用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、…

淘宝十年技术思考与总结,让人惊叹的进化脱变,最终确认版已发布

看了淘宝在将近10年时间里技术的革新&#xff0c;我对技术与业务有了更近一步的认识。 任何技术都是从小做起&#xff0c;一步步做起来的。如果你让04年的淘宝去做一个能承受10亿次访问的网站&#xff0c;马云那时候肯定会伤透脑筋&#xff0c;即使做半年都做不出来。但现在&a…

Java实现邮件发送

这里我们以QQ邮箱为例。 一、导入依赖:<dependencies><!-- https://mvnrepository.com/artifact/javax.activation/activation --><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><versio…

联邦学习:联邦异构知识图谱划分

在联邦场景下,C个知识图谱位于不同的客户端上。知识图谱拥的实体集合之间可能会存在重叠,而其关系集合和元组集合之间则不会重叠。我们联系一下现实场景看这是合理的,比如在不同客户端对应不同银行的情况下,由于不同银行都有着自己的业务流程,所以关系集合不重叠。本文我们…

如何给PDF文件添加水印?PDF免费添加水印教程来了

有时候&#xff0c;为了不让别人盗用我们PDF文件里面的内容或图片&#xff0c;或者是出于宣传产品的目的&#xff0c;我们经常会需要给自己的PDF文件添加各种类型的水印&#xff0c;那你们知道如何给PDF文件添加水印吗&#xff1f;下面我们就来看看如何给PDF文件添加水印&#…

瞄准五金行业采购痛难点,智慧采购管理系统实现业务流程数据化,提高采购效率

五金行业采购一直是传统企业采购的软肋和头痛环节&#xff0c;无论从人力成本&#xff0c;物料成本&#xff0c;财务监管成本&#xff0c;物流成本等都存在一个整合服务需求&#xff0c;同时&#xff0c;传统五金行业采购难的问题&#xff0c;也一直制约着行业发展&#xff0c;…

股指期货高手陈(股指期货第一人)

​ 什么是股指期货&#xff0c;怎么玩&#xff1f;请教高手&#xff01; 股指期货&#xff08;Stock Index Futures&#xff0c;即股票价格指数期货&#xff0c;也可称为股价指数期货&#xff09;&#xff0c;是指以股价指数为标的资产的标准化期货合约。双方约定在未来某个特…

RK3399应用开发 | 移植libdrm到rk3399开发板(2.4.113)

一、下载源码 下载地址:https://dri.freedesktop.org/libdrm/。 这里我下载最新的2.4.113版本: wget https://dri.freedesktop.org/libdrm/libdrm-2.4.113.tar.xz解压: xz -d libdrm-2.4.113.tar.xz tar -xf libdrm-2.4.113.tar二、编译环境安装 1. 更新python ubuntu安…

【安信可NB-IoT模组EC系列应用笔记⑧】用NB-IoT模组EC系列了解LwM2M协议并接入云平台

文章目录前言一、测试准备1、硬件准备2、云平台准备二、云平台连接1.注册入网2.读取IMSI及IMEI3.利用IMSI及IMEI创建设备4.LwM2M连接云平台设备三、 数据互交1.ATMIPLNOTIFY 通知属性变化2.ATMIPLREADRSP 返回读取结果3.ATMIPLWRITERSP 发送写入结果4.ATMIPLEXECUTERSP 发送执行…

半乳糖-人血清白蛋白 Gal-HSA,Gal-PEG-HSA 半乳糖修饰人血清白蛋白

产品名称&#xff1a;半乳糖修饰人血清白蛋白 Gal-HSA 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 温馨提醒&#xff1a;仅供科研&#xff0c;不能用于人体…

supervisor管理prometheus进程

一、supervisor简单介绍 二、supervisor安装 三、supervisor部署应用 四、supervisorctl常用指令 五、supervisor测试 一、supervisor简单介绍 1、 概述 supervisor是一个Python编写的进程管理工具&#xff0c;可以方便启动、重启、关闭、单个或多个进程&#xff0c;可以简…

中国数字视听行业全景调研与投资趋势预测报告

数字视听和视听技术的概念 传统视听技术既包括视觉技术&#xff0c;也包括听觉技术&#xff0c;即模拟信号&#xff0c;包括录音录像、摄影等。随着时代和科技的发展&#xff0c;先进的计算机技术在检察系统和办公业务中得到广泛应用&#xff0c;传统的视听技术也逐渐向数字化方…

硬件开发趋势与技术探索

LiveVideoStackCon 2022 音视频技术大会 北京站将于11月25日至26日在北京丽亭华苑酒店召开&#xff0c;本次大会将延续【音视频无限可能】的主题&#xff0c;邀请业内众多企业及专家学者&#xff0c;将他们在过去一年乃至更长时间里对音视频在更多领域和场景下应用的探索、在实…