美文网首页
cookie-universal 踩坑两枚

cookie-universal 踩坑两枚

作者: 梧桐月明中 | 来源:发表于2020-12-28 16:14 被阅读0次

最近处理 nuxt 同构应用的权限问题,用 cookie-universal-nuxt 来进行 cookie 操作,遇到一点恼人的问题,现记录如下供参阅。

问题一:

服务端请求端口返回401权限错误

线索:

  • 服务端请求时会自己带上奇怪的token,此时 document.cookie 中并无token,这个奇怪的token哪来的?
  • 观察发生的时机,发现 401 在 QQ 第三方登陆后回跳网站后的 nuxtServerInit 中发生,此时 token 通过 $cookies.get('token') 取得
  • 查看 cookie-universal 源码发现服务端的 cookie 是通过 req.headers.cookie 获得的
  • 查看 QQ 登陆后回跳的 Doc 请求,发现 req 的 cookie 中有 token,应该是qq网站的token,却带过来被我获取当做了自己的 token 用

解决:
改token名,token太通用了,改成udm_token

问题二:

依然存在返回401问题,具体时机为登录后在个人中心页刷新,接口返回401,在其它页面刷新不会

线索:

  • 查看刷新时的 Doc 请求,发现带了两个 udm_token,服务端取第一个来用,而第一个是过期了的。
  • 在网络中查看请求的两个 udm_token,发现是两个 path 下的,path 一个是 "/" 一个是 "my/"
  • 个人中心页地址是 /my/account,其它的页面是单级地址例如 /me
  • 猜测是有 udm_token 在 set 时被设置在了 my/ 下,而退出登录删除时并没有删除这个地址下的内容
  • 查看 cookie-universal 源码,发现 set 方法默认带 options = {path: '/'}
    set(name = '', value = '', opts = { path: '/' }) {
      if (isNeither) return
      value = typeof value === 'object' ? JSON.stringify(value) : value

      if (isServer) {
        const cookies = getResponseCookies()
        cookies.push(Cookie.serialize(name, value, opts))
        setResponseCookie(cookies)
      } else {
        document.cookie = Cookie.serialize(name, value, opts)
      }
    }
  • 在我的代码中,存在传入 options 的情况,options 中加入了 maxAge,却没有加入 path, 因此被错误地设置到了 /my 下
// 错误
this.$cookies.set('udm_token', token, {
    maxAge: 60 * 60 * 24 * 7
})

解决:
在手动传入 options 时一并添加 path: '/' 得以解决

this.$cookies.set('udm_token', token, {
    maxAge: 60 * 60 * 24 * 7,
    path: '/'
})

总结:

解决下来回头看觉得问题挺蠢的,感叹规范化代码和好好看文档的重要性。
不过掉坑挣扎爬出来的过程,也是分析解决问题过程,还熟悉了源码和原理,收获也不少,哈哈。

相关文章

  • cookie-universal 踩坑两枚

    最近处理 nuxt 同构应用的权限问题,用 cookie-universal-nuxt 来进行 cookie 操作...

  • JavaScrip-StepPitGuide《JavaScrip

    《JavaScript踩坑指南》JavaScrip-StepPitGuide? 《JavaScript踩坑指南》 ...

  • 算法踩坑6-二叉搜索树排序

    背景 接上面五篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 算法踩坑4-冒泡排序 ...

  • 算法踩坑5-归并排序

    背景 接上面四篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 算法踩坑4-冒泡排序 来...

  • D1094:踩坑的价值最大化

    是人就会踩坑,不踩坑理论上就不属于人类,踩坑是人之常情,能回头站在坑边反思,才是对踩过的的坑价值最大化的体现,要不...

  • 交互设计师所要避免的几个坑

    前言 工作中难免会踩到几个坑,即使现在不踩以后还会踩,只有踩过才会深刻记住,踩过说明爱过!但是踩过的坑必须把坑填满...

  • 踩坑,使用cocoaPods import导入时没有提示的解决办

    续上篇写的,踩坑,cocoaPods ---- framework not found Pods之后 ,又踩坑了。...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

  • 随笔

    读书啊,就是一个坑踩完了又掉进另一个坑,先说踩读书没用的坑,爬出来了,再踩读书要多的坑,之后再踩读书要精啊,读书要...

  • PHP中的数据类型

    一说到数据类型,这个坑就太多了,多到有哪些坑,有多少坑,不知道自己还会踩哪些坑,以及踩过的坑还会不会再踩,我对...

网友评论

      本文标题:cookie-universal 踩坑两枚

      本文链接:https://www.haomeiwen.com/subject/vwctoktx.html