资讯专栏INFORMATION COLUMN

Vue中的验证登录状态

draveness / 1823人阅读

摘要:用存储用户路由守卫路由中设置的字段就在当中每次跳转的路径登录状态下访问页面会跳到如果没有访问任何页面。一个简单的保存登录状态的小。

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

先说一下我的实现步骤:

使用easy-mock新建登录接口,模拟用户数据

使用axios请求登录接口,匹配账号和密码

账号密码验证后, 拿到token,将token存储到sessionStorage中,并跳转到首页

前端每次跳转时,就使用导航守卫(vue-router.beforeEach)判断 sessionStorage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面。

注销后,就清除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中写好登陆框:


然后下载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{
          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://www.ucloud.cn/yun/109019.html

相关文章

  • 一个JAVA WEB伪全栈的VUE入坑随笔:从登录开始(VUEX)

    摘要:此文章用于记录本人学习历程,有共同爱好者可加好友一起分享。从上周天,由于本周有公司篮球比赛,所以耽误两天晚上,耗时三个晚上勉强做了一个登录功能。这里的用户信息和登录状态都是直接取的中的用户信息进行属性值初始化。 此文章用于记录本人VUE学习历程,有共同爱好者可加好友一起分享。从上周天,由于本周有公司篮球比赛,所以耽误两天晚上,耗时三个晚上勉强做了一个登录功能。中间的曲折只有自己知道,有...

    Zack 评论0 收藏0
  • 手摸手,带你用vue撸后台 系列二(登录权限篇)

    摘要:我们将登录按钮上绑上事件,点击登录之后向服务端提交账号和密码进行验证。所以前端和后端权限的划分是不太一致。侧边栏最后一个涉及到权限的地方就是侧边栏,不过在前 完整项目地址:vue-element-admin 系列文章: 手摸手,带你用vue撸后台 系列一(基础篇) 手摸手,带你用vue撸后台 系列二(登录权限篇) 手摸手,带你用vue撸后台 系列三 (实战篇) 手摸手,带你用vu...

    不知名网友 评论0 收藏0
  • 基于 Vue 的后台管理系统前端实践

    摘要:输入框内容过滤产品有一个需求是,在搜索用户信息时,只能通过邮箱搜索,并且只能输入字母数字以及。我选择了输入框的值这里的坑就是需要在中更新值,因为元素这时才刷新。是否有一定要用的必要类似的管理系统涉及到不同页面之间的交互都很少。 初始化项目 使用 Vue-cli3 初始化项目1 安装 Element UI安装 Vue-i18n,做相关配置2,3 原则上需要对 Element 也做 I18...

    scwang90 评论0 收藏0
  • vue全家桶仿某鱼部分布局以及功能实现

    摘要:在这里简单叙述一下我仿某鱼部分布局以及功能实现的过程,仅做学习用途。另一方面,当与现代化的工具链以及各种支持类库结合使用时,也完全能够为复杂的单页面应用提供驱动。可以进行确认收货后删除订单。 前言 每次写文章时,总会觉得比写代码难多了,可能这就是我表述方面的不足吧,然而写文章也是可以复盘一下自己的开发过程,对自己还是受益良多的。在这里简单叙述一下我仿某鱼部分布局以及功能实现的过程,仅做...

    dreamGong 评论0 收藏0
  • VUE知识点集锦

    摘要:载入前后在阶段,实例的和都初始化了,但还是挂载之前为虚拟的节点,还未替换。类似于,不同在于提交的是,而不是直接变更状态可以包含任意异步操作。 vue基础 1、 router 路由与 a 标签的区别:https://www.jianshu.com/p/34b...2、 VUE双向绑定的原理: 答:VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<