摘要:两步教你在Vue中设置登录验证拦截!

本文分享自华为云社区《两步教你在Vue中设置登录验证拦截!》,作者: 灰小猿 。

今天在做vue和springboot交互的一个项目的时候,想要基于前端实现一些只有登录验证之后才能访问某些页面的操作,所以在这里总结一下实现该功能的一个解决方案。

首先说一下我是如何判断是否已经登录的,

一、解决思路

由于在我的springboot后台采用的shiro+Jwt安全框架,所以会在登录之后反馈给前端一个token,并且前端会将该token进行存储,所以我是去查找浏览器中是否存在token,如果浏览器中存在token,则说明登录成功,可以访问相关页面;

如果没有token则说明没有登录,j就跳转到登录页面。为了简化操作,我将这个验证的过程进行了封装。

注意:使用这种方法进行验证的前提是你的前后端是通过shiro和token进行验证的,并且前端会存储服务器返回的token。

二、让浏览器存储服务器返回的token

首先来看一下服务器端返回的token是如何被我在前端页面中存储的。

首先我在store文件下的index.js文件中封装了一个SET_TOKEN方法,用来将token存储到浏览器,这样我们每次就都可以通过localStorage.getItem(“token”),来从本地拿到我们的token,同时封装了一个REMOVE_INFO方法,在当我们退出登录的时候,清空浏览器中的token信息。

store文件下的index.js中代码如下:

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {// token: "",//用户的信息可以直接从浏览器中取出来token: localStorage.getItem("token"),//反序列化操作userInfo: JSON.parse(sessionStorage.getItem("userInfo"))},mutations: {/**类似set操作*///给token赋值SET_TOKEN: (state, token) => {state.token = token;//将信息存储到浏览器中,以至于浏览器关闭时信息还在localStorage.setItem("token", token);},//给userinfo赋值SET_USERINFO: (state, userInfo) => {state.userInfo = userInfo;//session会在每次浏览器关闭时清空,在重新登录后再生成//由于sessionStorage不能存储对象,所以要将其存储成字符串的形式sessionStorage.setItem("userInfo", JSON.stringify(userInfo));},//移除用户信息REMOVE_INFO: (state) => {//移除用户信息时将用户所有的信息都置为空state.token = "";state.userInfo = {};localStorage.setItem("token", "");sessionStorage.setItem("userInfo", JSON.stringify(""));}},getters: {/**类似get请求*///获取用户信息getUser: state => {return state.userInfo;}},actions: {},modules: {}
})

三、在请求中设置访问权限

由于我们并不是所有的页面都只要在登录的时候才能访问,所以我们要对需要进行登录才能访问的页面设置访问权限,

在vue中我们一般将访问路由设置在router下的index.js文件中,对于需要添登录权限的请求路由,我们可以给其增加meta属性,在其中设置一个Boolean类型的属性requireAuth, 我们会以该属性是否为true来判断是否需要验证登录。

比如我们的BlogEdit页面只有在登录的时候才能访问,Login页面不需要登权限,那么我们就可以这样设置:(代码有删减,但是保留了核心部分,只是删除了部分路由。)

/*** 路由注册中心*/import Vue from 'vue'
import VueRouter from 'vue-router'
//注册页面
import Login from '../views/Login.vue'
import BlogEdit from '../views/BlogEdit.vue'
Vue.use(VueRouter)const routes = [{path: '/login',name: 'Login',component: Login},{path: '/blog/add',name: 'BlogAdd',component: BlogEdit,//添加权限访问,表示只有登录之后才能进行该操作meta: {requireAuth: true}},
]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes
})export default router

这样在每次请求BlogEdit页面的时候都会进行判断。

四、封装登录验证

现在我们需要写一个方法来对我们刚才设置的属性进行验证。所以在src目录下新建一个permission.js文件,在其中进行封装。

思路是这样的: 首先我们拦截该请求,获取到该请求中的requireAuth参数,如果参数是true,那么就去获取浏览器中的token,验证当前是否是登录状态。如果存在token,就放行请求;如果没有获取到token,就跳转到登录页面。

注意:如果你是基于其他验证登录的,可以将//获取到本地的token
const token =ocalStorage.getItem(“token”)
换成你的验证方式,但是思路都是一样的。

代码如下:

/*** 请求登录验证,如果没有登录,不能访问页面,返回到登录页面*/
import router from "./router";//路由判断登录,根据路由配置文件的参数
router.beforeEach((to,from,next)=>{//判断该路由是否需要登录权限//record.meta.requireAuth是获取到该请求中携带的该参数if (to.matched.some(record => record.meta.requireAuth)){//获取到本地的tokenconst token = localStorage.getItem("token")console.log("显示token----------:" + token)//判断当前的token是否存在,也就是登录时的tokenif (token){//如果指向的是登录页面,不做任何操作if (to.path === "/login"){}else {//如果不是登录页面,且token存在,就放行next()}}else {//    如果token不存在//    前往登录next({path:'/login'})}}else {//如果不需要登录认证,就直接访问next()}
})

最后别忘了将该页面引入到mian.js中。

//导入permission.js,用户进行前端的权限控制
import "./permission"

总结一下

主要的操作就是第三步和第四步,只要你在请求路由中设置了登录验证的参数,同时第四步写入了登录拦截验证,并且引入到的main.js文件中,就可以了!

至此通过前端验证登录拦截完成。

点击关注,第一时间了解华为云新鲜技术~

只需2步,教你在Vue中设置登录验证拦截相关推荐

  1. 两步教你在Vue中设置登录验证拦截!

    Hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 今天在做vue和springboot交互的一个项目的时候,想要基于前端实现一些只有登录验证之后才能访问某些页面的操作,所以在这里总结一下实现 ...

  2. 放大缩小不习惯?只需两步教你solid works如何设置反转滚轮缩放

    第一步,打开设置 第二步,在 "设置-视图" 中勾选 "反转鼠标滚轮缩放方向"最后点击确定  OK,现在缩放视图就更适合大部分人的习惯了.

  3. 只需两步,教你正确识别百度蜘蛛

    经常听到站长们问,百度蜘蛛是什么?最近百度蜘蛛来的太频繁服务器抓爆了,最近百度蜘蛛都不来了怎么办,还有很多站点想得到百度蜘蛛的IP段,想把IP加入白名单,但IP不固定,这些百度方面并未透露相关信息. ...

  4. 从安卓8.0到android n,只需三步! 教你玩转安卓平板屏幕校色

    校色对于摄影爱好者以及从事设计制图的专业人士而言,为了更好的处理作品,因此需要一个色彩饱和度和精准度都非常优秀的显示器.不过这些专业用户有时会外出拜访客户或者将自己的作品与同行们互相交流,这时肯定不会 ...

  5. iOS - 外加字体(只需三步-教你轻松实现)

    外加字体 1.首先info.plist中加入属性Fonts provided by application,在item 0 处填写导入的ttf文件名 eg: <key>UIAppFonts ...

  6. 无返回值_只需一步,在Spring Boot中统一Restful API返回值格式与处理异常

    统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: public cl ...

  7. 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示

    在打开很多使用VB6开发的软件(系统)工程文件(源代码)时,经常会遇到"不能加载MSCOMCTL.OCX"的错误提示,如图所示(此处以本店开发的一个系统为例进行讲解): 在上图中点 ...

  8. 自己搭建php主机绑定域名,只需5步,教你用虚拟主机搭建出属于自己的网站

    原标题:只需5步,教你用虚拟主机搭建出属于自己的网站 虚拟主机创建一个网站其实非常简单,流程简单的归为下面几个步骤: 1,购买虚拟主机,注册域名 2,绑定解析域名到所购买的虚拟主机 3,使用FTP上传 ...

  9. 如何将瀑布流里的图片加链接_只需5步!魔幻丛林瀑布后期揭秘

    去年的旅行,我跋山涉水,翻山越岭,探索了很多的幽谷密林. "海蓝时见鲸,林深处遇水"我记录下了很多瀑布的影像. 下面是一组后期处理前后的对比图 如何将原本干涩直白的画风打造出如梦游 ...

最新文章

  1. 152斤了,离健康又近了一步
  2. Android Studio 单刷《第一行代码》系列 03 —— Activity 基础
  3. web服务器-nginx
  4. 动态列排序_Excel表格利用函数制作排序器(可依据不同字段、升降序排序)
  5. Linux——umask使用详解
  6. 年度大战即将拉开!iPhone 11系列后,轮到华为Mate30系列表演了
  7. poj1860(spfa判正环)
  8. java 实例域_Java实例域初始化
  9. SQOOP 基础及安装
  10. Atitit 提升稳定性 数据库死锁 目录 1.1. 配置数据库死锁检测超时时间从默认50s到10s 1 1.2. 调整隔离级别到read commit 1 1.3. mysql数据库连接使用完毕
  11. 机房工程主要施工方法和机房工程验收
  12. 电商支付-使用Restful api接口集成Paypal支付方式(一)
  13. 源泉书签支持批量删除功能啦
  14. C语言课程设计(服装管理系统详解)
  15. 超详细的数据分析职业规划
  16. 我从冯·诺依曼计算机体系,追溯到了JVM,原来一切如此
  17. css在文字前面设置带颜色的小方块样式
  18. 【fragment】Android Fragments 详细使用
  19. Android 10.0 关机对话框UI定制化开发(一)
  20. vue用el-select和el-tree实现树状结构单击选中

热门文章

  1. Bootstrap创建按钮下拉菜单
  2. html显示docx,网页中显示PDF的HTML代码.docx
  3. Git笔记(25) 选择修订版本
  4. pcl中set程序_PCL中分割方法的介绍(3)
  5. asp html转义字符串,asp.net – 转义HTML实体并避免WebForm标签中的HTML注入?
  6. linux ubuntu软件中心,安装Lubuntu 软件中心
  7. PHP 中 call_user_func 的使用
  8. Ollydbg中F8的Bug
  9. awk命令和grep命令的使用
  10. cxTreeList 控件说明