收藏
回答

小程序登录态过期的问题

登录这块我基本了解,但是目前小程序的登陆态的方案介绍的真不清楚,原生App登陆态过期可以跳到登录页解决登陆态过期问题,web网页可以直接重定向到登录页面解决这个问题。唯独小程序目前不太清楚。下面我具体来说。


第一点,做静默登录,是不需要跳转到授权页面的,如果跳到授权页面只是为了登录,那小程序的静默登录也就白做了。


第二点,如果自定义登陆态的过期时间小于微信端的 session_key的过期时间,那就不需要调用 wx.checkSession ,根据后台返回状态码来判断有没有过期,过期则重新登录,但这里有一个问题,就是我可能同时调用多个API,这样的的话可能会重复登录多次。


第三点,如果自定义登陆态的过期时间大于微信端的 session_key 的过期时间,自定义登陆态必须的,但自定义登陆态的过期时间就白做了,因为只需要 wx.checkSession 就可以,而且 session_key的过期时间还是动态的。


第四点,如果我在小程序端存储过期时间的方式来做判断登录态是否过期,虽然可以,但感觉很不安全。


第五点,如果自定义登陆态不设置过期时间,只是用来识别用户,然后使用 wx.checkSession 来判断有没有过期,而且 wx.checkSession 判断的登陆态过期时间还有个好处就是它是动态的,如果本次小程序生命周期判断为true,则本次生命周期都不会过期。这种看起来很完美,但不知道会不会不安全?


ok,希望各位开发者和官方来说道说道。。。给点建议。。。


回答关注问题邀请回答
收藏

6 个回答

  • Special
    Special
    2018-06-14

    之前有两篇关于登录和用户信息的小故事,建议看下


    https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=1383966312&docid=000e2aac1ac838e29aa6c4eaf56409

    https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=1383966312&docid=000c2424654c40bd9c960e71e5b009

    2018-06-14
    有用
    回复 1
    • 长天
      长天
      2018-06-14

      官方,你没明白我说的话,我说的主要问题是自定义登陆态的时效性的策略应该如果制定才最好,不是授权获取用户信息,授权获取用户信息这点没有什么问题,很ok。希望再重新阅读我的问题!感谢!

      2018-06-14
      1
      回复
  • chinnn
    chinnn
    2021-06-03

    我想知道在小程序运行在后台但是小程序没有被销毁(查资料得知iOS运行在后台5分钟会被销毁,安卓随缘可能很久也可能几分钟)那么只要没被销毁登录态就一定有效么,因为判断登录态一般放在APP onlaunch里面 如果没被销毁小程序再进入是不会走onlaunch的 那么也就检测不到登录态失效了?

    2021-06-03
    有用
    回复
  • 
    
    2020-07-24

    楼主,我现在也遇到这个问题了,有什么比较好的解决方法吗

    2020-07-24
    有用
    回复
  • Neal
    Neal
    2019-09-02

    请问这个问题是怎么解决的?


    2019-09-02
    有用
    回复 3
    • 长天
      长天
      2019-09-04
      能怎么解决,要么使用 wx.checkSession 要么使用自定义登录态,根据后台返回状态码判断是否需要重新登录,然后在内部重新登录再获取数据,或者在每个页面所有请求之前发一个checkSession请求专门判断是否过期,然后再请求数据
      2019-09-04
      回复
    • Neal
      Neal
      2019-09-04回复长天
      我是用storage做一个登陆时间存储,然后拿现在的时间和以前登录的时间作比较,如果大于24小时(后台的cookie是规定24小时过期)就清除cookie跳转到登录页重新登录
      2019-09-04
      回复
    • 长天
      长天
      2019-09-04
      你有登录页,实际上不需要这么费劲,登录由前端有无token和后端返回需要登录的状态码就行了
      2019-09-04
      回复
  • kin
    kin
    2018-06-14

    我也是疑惑这点,感觉自定义登录态过期时间只要依据wx.checkSession来检查就好了。每次onLaunch的时候首先调用wx.checkSession,过期了重新wx.login,也就生成新的自定义登录态了。


    那么问题来了,会不会出现,wx.checkSession返回成功,但是Storage里没有自定义登录态的情况啊?

    2018-06-14
    有用
    回复 1
    • 长天
      长天
      2018-06-14

      首先会有你说的情况,那就是在工具中删除 session。再者按照你的方式, session 是否过期的判断需要两个情况的综合,先判断有没有 session 再 wx.checkSession 判断是否过期,就ok了。

      2018-06-14
      1
      回复
  • 长天
    长天
    2018-06-13


    自定义登陆态是必须的,它是用来标识用户的,问题在于登陆态的过期时间的管理

    2018-06-13
    有用
    回复 6
    • 張嘉祺
      張嘉祺
      2019-12-11
      楼主对于登录态的过期时间管理有何建议吗
      2019-12-11
      回复
    • 长天
      长天
      2020-08-11回复張嘉祺
      我说的第五点,我觉得较合理,只是不知道这种方式有没有安全问题。步骤就是每次启动小程序,先判断有没有 token, 有的话再通过 wx.checkSession 判断有没有过期。
      2020-08-11
      回复
    • 刘高艺
      刘高艺
      2020-09-01回复长天
      目前我遇到的问题就是第二点,静默登录,过期后会调用多个请求多次重复登录,这块目前有好的解决办法吗
      2020-09-01
      回复
    • 长天
      长天
      2020-09-02回复刘高艺
      全局定义一个是否正在登陆的变量锁就行
      2020-09-02
      回复
    • 长天
      长天
      2020-09-02回复刘高艺
      然后每次登陆后刷新当前页面
      2020-09-02
      回复
    查看更多(1)
登录 后发表内容