收藏
回答

wx.login获取的Code有效期五分钟,为何已被使用的code在5分钟内多次返回?

最终想知道的答案:是否相同的AppID、Code代表的就是同一个用户?是的话,这边就直接缓存这个Code5分钟。

问题描述:

首先:前端每次获取Code都会一定是从接口获取最新,没有缓存

本地调试一分钟内获取的Code都是不一样的

然后生产服务器日志记录发现5分钟内会返回相同Code,调用jscode2session会返回 40163 code been used

日志记录如下:时间点、请求页面都不一样的

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

3 个回答

  • brave
    brave
    2021-12-20

    目测是前端多次调用了后端接口,传了同一个code,或者是后端逻辑有问题

    2021-12-20
    有用 1
    回复 5
    • 开发君
      开发君
      2021-12-20
      后端登录只有一个接口,且只会调用一次jscode2session
      前端每次获取Code都会一定是从接口获取最新,没有缓存
      前后端本地联调试一分钟内获取的Code都是不一样,不会出现线上日志的问题,
      前端单独调试,不请求后端,反而偶尔出现微信返回给前端一样的Code
      这段代码18年运行了,一直有这个问题,之前已经在后台缓存code一分钟就好一下,最近出现5分钟内都会有相同,所以问问
      2021-12-20
      回复
    • brave
      brave
      2021-12-20回复开发君
      按你说的「微信返回给前端一样的Code」,那就让前端排查代码逻辑。很明显自己写了个bug
      2021-12-20
      回复
    • 开发君
      开发君
      2021-12-20
      我的意思是前端请求完wx.login直接打印出来的code是重复的,是很偶尔会出现
      2021-12-20
      回复
    • brave
      brave
      2021-12-20回复开发君
      那就让前端创建个新的项目,单独写一句wx.login不调用接口,看是不是会出现这种情况。不是前端有问题就是后端的问题。
      2021-12-20
      回复
    • 开发君
      开发君
      2021-12-20回复brave
      刚刚本地测不会出现重复,我再找时间看看吧,感谢回帖
      2021-12-20
      回复
  • Cassius
    Cassius
    2022-07-22

    大佬,我们也遇到这个问题,本地调试都没问题,发布到线上之后就会出现授权code已被使用的情况,一开始加了个五分钟的缓存,有些用户没问题,有些新用户使用时就会有问题。前端不用缓存code是吧?

    2022-07-22
    有用
    回复 1
    • 开发君
      开发君
      2022-07-22
      查了下日志,最近都没怎么出现这种情况了, 目前是后端缓存1分钟,前端不要缓存。
             可能因为当时注册获取手机号需要保证sessionKey有效,同一用户短时间内比较频繁 wx.Login,就容易出现code重复情况(新用户打开小程序wx.Login一次获取openID,然后跳转到注册页又一次wx.Login)
             现在获取手机号基本上用bindgetphonenumber之后,不用wx.Login获取sessionKey解密,就不会出现了。
      2022-07-22
      回复
  • 🍀 🌻     诚
    🍀 🌻  诚
    2021-12-20

    你看看前端接口,post的code重复了没。wx.login给的code都是不一样的

    2021-12-20
    有用
    回复 1
    • 开发君
      开发君
      2021-12-20
      后端登录只有一个接口,且只会调用一次jscode2session
      前端每次获取Code都会一定是从接口获取最新,没有缓存
      前后端本地联调试一分钟内获取的Code都是不一样,不会出现线上日志的问题,
      前端单独调试,不请求后端,反而偶尔出现微信返回给前端一样的Code
      这段代码18年运行了,一直有这个问题,之前已经在后台缓存code一分钟就好一下,最近出现5分钟内都会有相同,所以问问
      2021-12-20
      回复
登录 后发表内容