记录一次登录相关bug

原因

我发现我的登录是有问题的,起初我是觉得是session的问题

下面先回顾一下页面的四种本地保存方式

链接

https://blog.csdn.net/YN2000609/article/details/131709478

大概的有四种 ,其中他们的存储时间分别是

IndexedDB 的数据存储时间最长,Local Storage 的数据存储时间次长,Cookie 的数据存储时间相对较长,而 Session Storage 的数据存储时间最短。

他们的存储失效界限是

indexeddb是没有 local storeage也是没有 浏览器关闭还存着 cookie是自行设置时间,如果不设置时间就是刷新还有 浏览器关闭就没 session是如果不设置时间是刷新就没

不巧我使用的就是session

我起初觉得是这个session的问题 但是我这个框架内置了登录刷新的一些逻辑 太多了我没有看 所以就无脑把时间都加成了一个小时 也就是把expires改成正常时间加一个小时。但是发现刷新之后还是没了,没了就是存储的用户名为空,我在想是哪里 结果就发现是一段这样的代码

cpp 复制代码
  if (data.userId && data.roles) {
    console.log("如果都在")
    console.log(data.userId)
    const { userId, roles } = data;
    setSessionKey(userId, roles);
  } else {

    console.log(data)
    const userId =
      storageSession().getItem<DataInfo<number>>(sessionKey)?.userId ?? "";
    const roles =
      storageSession().getItem<DataInfo<number>>(sessionKey)?.roles ?? [];
    setSessionKey(userId, roles);
  }
}

把session里面的username改成了""也就是空,但是逻辑根本不对 他是在用户名和权限其一不再的时候才运行的,然后想到我的roleid是0 会不会在if中被看作false 的存在,

改成

if (data.userId && data.roles != null) {

console.log("如果都在")

console.log(data.userId)

const { userId, roles } = data;

setSessionKey(userId, roles);

} else {

复制代码
console.log(data)
const userId =
  storageSession().getItem<DataInfo<number>>(sessionKey)?.userId ?? "";
const roles =
  storageSession().getItem<DataInfo<number>>(sessionKey)?.roles ?? [];
setSessionKey(userId, roles);

}

}果然就没运行了

错误原因

1 是接口返回的roles的值是number类型的 而框架内都是以string形式存储的 所以在返回数据的时候,数字0被当成了为空也就是false

2 刷新的逻辑和登录逻辑重叠 不易维护

3 返回数据的时候前端期望后端返回的是username 但是后端偏偏返回了userid 就常常获取不到值

4 session不够持久化存储就一直每次刷新的时候重新获取 不符合规范

相关推荐
万少15 小时前
万少用9个AI工具,帮朋友完成了一个"不可能"的项目
前端
小小小小宇15 小时前
Vue `import` 为什么可以异步加载
前端
WMYeah15 小时前
【无标题】
前端·rust·抽奖程序·跨平台抽奖程序
Unbelievabletobe15 小时前
免费外汇api的响应时间在不同时段下的波动分析
大数据·开发语言·前端·python
大哥,带带弟弟15 小时前
Grafana 前端嵌入与 JWT 鉴权实战
前端·grafana
小小小小宇15 小时前
前端 V8 引擎垃圾回收机制与内存问题排查
前端
前端老石人15 小时前
CSS 值定义语法
前端·css
sheeta199816 小时前
Vue 前端基础笔记
前端·vue.js·笔记
小小小小宇16 小时前
GitLab + GitLab Runner + Qiankun 微前端 + Nginx + Node 中间件 前端开发机从零搭建 CI/CD 全流程
前端
前端那点事16 小时前
别再写垃圾组件!Vue3 如何设计「真正可复用」的高质量通用组件
前端·vue.js