219. 单页应用 会话管理(session、cookie、jwt)

栏目: Html5 · 发布时间: 5年前

内容简介:原文链接:关键字:实现代码

原文链接: https://github.com/ly525/blog...

关键字: http-only , cookie , sessionid , vue-router , react-router , 安全localStorage , jwt

需求描述

  1. 内部管理平台,需要用户登录之后才能访问。现在将 该平台地址(www.xxx.com/home) 直接发给新来的运营同学
  2. 前端需要检测该用户是否已登录,如果未登录,则将其 redirect 到登录页面
  3. 因为该页面为单页应用,路由跳转不涉及后端的 302 跳转,使用前端路由跳转

实现思路

实现代码

// 以 vue-router 为例
// 登录中间验证,页面需要登录而没有登录的情况直接跳转登录
router.beforeEach((to, from, next) => {
  const hasToken = document.cookie.includes('sessionid');
  // 如果采用 jwt,则同样 hasToken = localStorage.jwt
  const pathNeedAuth = to.matched.some(record => record.meta.requiresAuth);
  // 用户本地没有后端返回的 cookie 数据 && 前往的页面需要权限
  // 
  if (pathNeedAuth && !hasToken ) {
    next({
      path: '/login',
      query: { redirect: to.fullPath },
    });
  } else if (hasToken && to.name === 'login') {
    // 已登录 && 前往登录页面, 则不被允许,会重定向到首页
    next({
      path: '/',
    });
  } else {
    next();
  }
});
  1. 应该在进入任何页面之前,判断:

    1. 该页面是否需要权限才能访问:登录、注册页面不需要权限
    2. 用户是否已经登录:本地 cookie (或者 localStorage)包含 session 相关信息

      Cookie: csrftoken=YaHb...; sessionid=v40ld3x....
  2. 如果 A页面需要权限本地 cookie中包含了 sessionid 字段 ,则允许访问A页面,否则跳转到登录页面

    response.setCookie
    
  3. 如果 用户已登录 && 在浏览器中输入了 登录页 地址,则将其重定向到 首页

更多说明

  1. 这样做,前端就不必再向后端发起 API 做权限鉴定了(后端返回401,前端跳转到 401),减少不必要的API 请求,特别是如果在API响应时间过长的情况下,体验不太友好。
  2. 用户修改 cookie,伪造 sessionid

    用户伪造的 sessionid
    
  3. 采用 localStorage 而不是 sessionStorage 的原因(SessionStorage 失效场景)

    原因:sessionStorage 无法跨 Tab 共享

    target="_blank"
    Duplicate
    

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

娱乐至死

娱乐至死

[美] 尼尔·波兹曼 / 章艳 / 广西师范大学出版社 / 2011-6 / 29.80元

《娱乐至死》是对20世纪后半叶美国文化中最重大变化的探究和哀悼:印刷术时代步入没落,而电视时代蒸蒸日上;电视改变了公众话语的内容和意义;政治、宗教、教育和任何其他公共事务领域的内容,都不可避免的被电视的表达方式重新定义。电视的一般表达方式是娱乐。一切公众话语都日渐以娱乐的方式出现,并成为一种文化精神。一切文化内容都心甘情愿地成为娱乐的附庸,而且毫无怨言,甚至无声无息,“其结果是我们成了一个娱乐至死......一起来看看 《娱乐至死》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码