随心而记
612 字
3 分钟
setCookie 异步导致的问题案例
2024-03-15
发布时间
分类
标签

最近有个新需求,用户登录后如果是黑名单用户的话,则不允许访问页面,并弹出提示。

由于这个项目的登录并非传统的用户名、密码登录,而是通过京东服务市场订阅软件,通过按钮重定向跳转并配合 setCookie 操作登录。详情如下:

Untitled

这里一开始和后端商量的方案是判断 cookietoken 字段是否存在,如果不存在则为黑名单用户,然后前端再处理打开遮罩并提示用户。

在这种情况下,由于setCookie是异步操作,可能会导致以下问题:

  1. 逻辑错误:由于setCookie是异步的,可能会导致在判断黑名单用户之前 cookie 还未被设置,导致判断逻辑错误。
  2. 用户体验问题:用户可能会在 cookie 还未被设置的情况下就看到页面内容,然后才收到黑名单提示,这样会导致用户体验不佳。
  3. 不稳定性:异步操作可能会导致不稳定的行为,因为异步操作的完成时间是不确定的,无法保证每次都能如期完成。

为了解决这个问题,你可以考虑以下方案:

  1. Loading 界面:在设置 cookie 期间显示一个 Loading 界面,确保在 cookie 设置完毕前用户无法看到页面内容。
  2. 延迟执行:设置一个定时器,在一定时间后再检查 cookie 是否设置成功,如果还未设置成功,则提示用户。
  3. 与后端沟通:与后端进行合作,讨论是否可以在登录成功后返回一个标识,而不是依赖于 cookie
  4. 后端检测:后端先提前检测是否是黑名单用户,如果是的话则重定向到 /black 路由

最终我们选择了方案 4!通过在后端进行黑名单用户检测,可以避免前端异步操作导致的问题,确保用户体验和逻辑的准确性。

在这个方案中,后端负责判断用户是否为黑名单用户,并且做出相应的跳转,前端则根据后端的响应进行重定向并传递参数,以此来实现对黑名单用户的处理。这样可以简化前端的处理逻辑,确保页面重定向和参数传递的准确性。

setCookie 异步导致的问题案例
https://www.promises.top/posts/case-studies-on-issues-caused-by-asynchronous-setcookie-operations/
作者
发布于
2024-03-15
许可协议
CC BY-NC-SA 4.0