2024-12-17-【小程序】小程序静默登录方案

一、现状

  1. 通过扫码进入个人中心页,后台异步执行静默登录后,个人中心页未监听全局登录数据已更新,导致页面未及时刷新。

  2. 添加监听修复该问题后,产生新的问题,通过扫码进入个人中心页,点击“退出登录”后,首页界面未更新为未登录态。

注:小程序静默登录常规做法,仅对缓存数据中有登录数据的情况进行登录态还原,不做接口调用的异步登录,让用户手动登录。

  • 小程序登录整体流程
    image.png

  • 小程序前端静默登录流程
    image.png

二、问题原因排查

当前静默登录(后台异步登录),由于页面监听方案为 Object.defineProperty 且 configurable 设为 true,可重复配置,当多次监劫持全局变量同一属性时前者将被覆盖,导致页面后台运行(hide)情况下无法正常监听登录数据变更。

三、静默登录 前端可选方案

  1. Object.defineProperty/Proxy(当前方案)
  2. 自定义发布订阅模式
  3. 过渡页
  4. 路由拦截
  • 监听涉及页面
    首页、个人中心、查看金额、入驻页。

image.png

  • 全局实现 劫持全局变量更新的监听方法(app.js)
    image.png

  • 页面监听 全局变量更新
    image.png

四、现有方案 Object.defineProperty/Proxy 优化

  1. 由于多次监听同一个全局变量存在覆盖问题,可将同一全局变量的监听改为方法数组,从而达到多次监听的目的。但应考虑多个监听带来的副作用,完善解除方法与解除监听的时机。
    image.png
  2. 由于监听登录数据存在可复用性,首页及个人中心页登录场景几乎相同,可考虑采用 behavaior 提取可复用逻辑。
    image.png

五、现有方案 存在的其他 BUG

扫码查看金额 => 进入个人页 => 退出登录 => 重新扫描查看金额,接口报错并跳转到首页

扫码进入个人中心页,页面登录态未刷新;(添加 watch 已修复,但引出新 bug,搜索进入首页后打开个人中心页,退出登录)


2024-12-17-【小程序】小程序静默登录方案
https://zhangyingxuan.github.io/2024-12-17-【小程序】小程序静默登录方案/
作者
blowsysun
许可协议