Vue中的验证登录状态

2023-11-15

Vue项目中实现用户登录及token验证

先说一下我的实现步骤:

  1. 使用easy-mock新建登录接口,模拟用户数据
  2. 使用axios请求登录接口,匹配账号和密码
  3. 账号密码验证后, 拿到token,将token存储到sessionStorage中,并跳转到首页
  4. 前端每次跳转时,就使用导航守卫(vue-router.beforeEach)判断 sessionStorage 中有无 token,没有就跳转到登录页面,有则跳转到对应路由页面。
  5. 注销后,就清除sessionStorage里的token信息并跳转到登录页面

使用easy-mock模拟用户数据

我用的是easy-mock,新建了一个接口,用于模拟用户数据:

{
  "error_code": 0,
  "data": [{
      "id": '1',
      "usertitle": "管理员",
      "username": "admin",
      "password": "123456",
      "token": "@date(T)",
    },
    {
      "id": '2',
      "usertitle": "超级管理员",
      "username": "root",
      "password": "root",
      "token": "@date(T)",
    }
  ]
}
复制代码

login.vue中写好登陆框:

<template>
<div>
    <p>用户名:<input type='text' v-model="userName"></p>
    <p>密码:<input type='text' v-model="passWord"></p>
    <button @click="login()">登录</button>
</div>
</template>
<script>
 export default {
    data() {
        return {
          userName:'root',
          passWord:'root'
        }
    }
}
</script>
复制代码

然后下载axios:npm install axios --save,用来请求刚刚定义好的easy-mock接口:

 login(){
        const self = this;
        axios.get('https://easy-mock.com/mock/5c7cd0f89d0184e94358d/museum/login').then(response=>{
          var res =response.data.data,
              len = res.length,
              userNameArr= [],
              passWordArr= [],
              ses= window.sessionStorage; 
          // 拿到所有的username
          for(var i=0; i<len; i++){
            userNameArr.push(res[i].username);
            passWordArr.push(res[i].password);
          }
          console.log(userNameArr, passWordArr);
          if(userNameArr.indexOf(this.userName) === -1){
              alert('账号不存在!');
          }else{
            var index = userNameArr.indexOf(this.userName);
            if(passWordArr[index] === this.passWord){
              // 把token放在sessionStorage中
              ses.setItem('data', res[index].token);
              this.$parent.$data.userTitle = res[index].usertitle;
              //验证成功进入首页
              this.startHacking ('登录成功!');
              //跳转到首页
              this.$router.push('/index');
              // console.log(this.$router);
            }else{
              alert('密码错误!')
            }
          }
        }).catch(err=>{
          console.log('连接数据库失败!')
        })
      }
复制代码

这一步最重要的是当账号密码正确时,把请求回来的token放在sessionStorage中,

配置路由

然后配置路由新加一个meta属性:

    {
      path: '/',
      name: 'login',
      component: login,
      meta:{
        needLogin: false
      }
    },
    {
      path: '/index',
      name: 'index',
      component: index,
      meta:{
        needLogin: true
      }
    }
复制代码

判断每次路由跳转的链接是否需要登录,

导航卫士

main.js中配置一个全局前置钩子函数:router.beforeEach(),他的作用就是在每次路由切换的时候调用 这个钩子方法会接收三个参数:to、from、next。 to:Route:即将要进入的目标的路由对象, from:Route:当前导航正要离开的路由, next:Function:个人理解这个方法就是函数结束后执行什么,先看官方解释 1.next():进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed(确认的), 2.next(false):中断当前的导航。如果浏览器的url改变了(可能是用户手动或浏览器后退按钮),那么url地址会重置到from路由对应的地址。 3.next('/')next({path:'/'}):跳转到一个不同的地址。当前导航被中断,进入一个新的导航。

用sessionStorage存储用户token

//路由守卫
router.beforeEach((to, from, next)=>{
    //路由中设置的needLogin字段就在to当中 
    if(window.sessionStorage.data){
      console.log(window.sessionStorage);
      // console.log(to.path) //每次跳转的路径
      if(to.path === '/'){
        //登录状态下 访问login.vue页面 会跳到index.vue
        next({path: '/index'});
      }else{
        next();
      }
    }else{
      // 如果没有session ,访问任何页面。都会进入到 登录页
      if (to.path === '/') { // 如果是登录页面的话,直接next() -->解决注销后的循环执行bug
        next();
      } else { // 否则 跳转到登录页面
        next({ path: '/' });
      }
    }
})
复制代码

这里用了router.beforeEach vue-router导航守卫 每次跳转时都会判断sessionStorage中是否有token值,如果有则能正常跳转,如果没有那么就返回登录页面。

注销

至此就完成了一个简单的登录状态了,浏览器关闭后sessionStorage会清空的,所以当用户关闭浏览器再打开是需要重新登录的

当然也可以手动清除sessionStorage,清除动作可以做成注销登录,这个就简单了。

    loginOut(){
    // 注销后 清除session信息 ,并返回登录页
    window.sessionStorage.removeItem('data');
    this.common.startHacking(this, 'success', '注销成功!');
    this.$router.push('/index'); 
    }
复制代码

写一个清除sessionStorag的方法。 一个简单的保存登录状态的小Demo。


参考: 腾讯云社区-Vue+SessionStorage实现简单的登录 SF-从前后端分别学习——注册/登录流程2 Vue-router实现单页面应用在没有登录情况下,自动跳转到登录页面 vue+axios新手实践实现登陆 Vue实战(四)登录/注册页的实现 vue页面控制权限,vuex刷新保存状态、登录状态保存 vue页面控制权限,vuex刷新保存状态、登录状态保存 (vue.js)前后端分离的单页应用如何来判断当前用户的登录状态? Vue登录注册,并保持登录状态 vue登录注册及token验证 Vue项目中实现用户登录及token验证

vue-router守卫导航官方文档:vue-router导航守卫

转载于:https://juejin.im/post/5c8232625188257ee855e601

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue中的验证登录状态 的相关文章

  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会

随机推荐

  • Kendo UI开发教程(1): 概述

    JavaScript 在开发Web应用的作用越来越大 JQuery简化了HTML和JavaScript之间的操作 jQuery的教程可以参见本博客jQuery和 jQuery UI 入门教程 jQuery UI 是一套 JavaScript
  • 前端开发程序员的月薪到底有多高?

    前几天微信公开课上 张小龙现场展示了 跳一跳 听说还会邀请最会 跳 的人去其办公室一决高下 不由让人下定决心苦练神功 以见张大佬一面 不管是小程序的横空出世 还是Web应用的大量涌现 它们都掀起了一波 前端开发需求热 给前端开发工程师们带来
  • RedisTemplate读取包含指定前缀的Key的value

    文章已同步到个人博客 http www tianshaojiao com p 2140 一 需求 我在做im开发的时候 往往需要在redis中存入客户端与服务端的连接信息 这些连接信息都是有指定前缀的 如下图所示 现在如果想要推送消息到所有
  • 【华为OD机试真题2023 JS】Linux发行版的数量

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 Linux发行版的数量 知识点DFS搜索BFS搜索并查集 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 Linux操作系统有多个发行版 distrowatch
  • -std=c99带来问题

    今天用 std c99编译c文件 内容是信号这一块的 包含了sigprocmask 编译时发现总是显示sigset t类型没有声明 函数中的3个状态的无法找到 后来发现把 std c99去掉就行了 不知道有什么区别
  • 15 玩转STM32之IIC通信(芯片硬件篇)

    15 1 IIC控制器说明 硬件部分 在14 玩转STM32之IIC通信 软件模拟篇 我们讲了软件模拟的方式 本章讲解芯片自带的硬件部分 并非所有的芯片都含有IIC 像51系列的是没有的 但是绝大多数是有的 根据我用过的S32 STM32
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 实战:单点登录的两种实现方式,附源码

    最近工作有点忙 好久没更新文章了 正好这两天在整理单点登陆相关的文档 今天趁着小孩睡着了 赶紧码一篇实战文交差 概念 单点登录 Single Sign On SSO 是一种身份验证服务 允许用户使用单个标识来登录多个应用程序或系统 如下图所
  • 关于vue-cli2.9.6 使用vue-video-player,视频播放rtmp视频流error:in ./node_modules/videojs-swf/dist/video-js.swf

    我在做vue前端开发项目的时候 领导让我在别人项目的基础上进行二次开发 我将自己的页面合并至平台 我用的vue cli版本是2 6 9 然后我按照正常流程 引入vue video player video js等 然后配置playerOpt
  • 【算法/剑指Offer】请实现一个函数,用来判断一颗二叉树是不是对称的。

    题目描述 请实现一个函数 用来判断一颗二叉树是不是对称的 注意 如果一个二叉树同此二叉树的镜像是同样的 定义其为对称的 代码很简单 关键还是知道怎么样才能判断一个 二叉树是否对称 只要采用前序 中序 后序 层次遍历等任何一种遍历方法 分为先
  • 复习笔记——计算机组成原理

    2014年12月考研前一周写的笔记 放在这里 希望对其他人有帮助 写到一半时 发现这个公开课的资料挺全的 http share onlinesjtu com course view php id 3 教材 视频 ppt 还有swf
  • 简单使用Linux

    1 创建虚拟机及安装操作系统 一 打开下载好的VMware Workstation软件 二 点击 创建新的虚拟机 三 选择需要创建的虚拟机 建议选自定义 再点击下一步 四 选择系统默认兼容性并选择稍后安装 再点击下一步 五 选择Linux系
  • 互联网晚报

    腾讯回应高考生喊话马化腾 2023高考首日 在杭州十四中考点 第一科语文科目考试还没有结束 一名男生就走出了考场 面对记者采访 男生喊话马化腾 腾讯能不能把QQ空间改回老版 新版太难用了 对此 腾讯QQ在其官方微博回应称 腾讯非常重视其建议
  • golang GET http、https、代理方式

    package utils import crypto tls encoding json io ioutil log net http net url time func GET url string reply interface er
  • CentOS 构建yum本地源

    不管是为了安全起见 还是为了方便 构建本地源对于维护工作肯定会提供一些便利 1 将事先准备好的镜像文件 如 CentOS 7 x86 64 DVD 1908 iso 加载至服务器CD DVD 或虚拟机CD DVD 并将镜像文件挂载至指定的目
  • java &= ~_Java基础一

    一 1 对象 其实对象就是类的实例化 如创建一个类 车 创建一个类的对象 小汽车 而且有颜色 大小 车速等等 2 类 例如车有 小汽车 大卡车 三轮车 四驱车等等 但要用一个词概括它们 则可以统称为车 现在这个 车 就相当于 类 3 方法
  • 1489. 田忌赛马 (贪心,区间dp)

    题目 田忌赛马的故事 田忌每次输一局要付200元 赢一局获得200元 平局获得0元 问 田忌和齐王都有n匹马的情况下 最多可以获得多少元 1489 田忌赛马 AcWing题库 由于田忌赛马的故事背景 我们很快就能够想到合理的贪心策略 上等马
  • mimikatz的使用

    目录 1 远程连接使用 2 本地使用 注意 1 版本问题 2 运行权限 3 抓取范围 4 抓不到密码的解决方法 mimikatz下载链接 mimikatz是个好东西 它的功能很多 最重要的是能从 lsass exe进程中获取windows的
  • 第几个幸运数

    暴力 include
  • Vue中的验证登录状态

    Vue项目中实现用户登录及token验证 先说一下我的实现步骤 使用easy mock新建登录接口 模拟用户数据 使用axios请求登录接口 匹配账号和密码 账号密码验证后 拿到token 将token存储到sessionStorage中