业务场景:
目前有一个微信公众号,里面有好几个菜单,点击菜单的时候会跳转到业务页面,业务页面会去通过网页获取accesstoken的方式获取用户信息。
我们知道,微信提供了标准的oauth2.0的规范来让我们获取微信的用户信息:
业务系统------>微信oauth------用户授权带上code跳转----->业务系统---->解析code------>通过code获取accesstoken------------>通过accesstoken获取用户信息。
那么以上是我通过简单的文字描述的流程。
在获取到accesstoken的时候,它的返回值(官方列子)是这样的:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔
我们可以看到有openId,有token和refresh_token,token的默认有效时间是两个小时,当过了这个时间以后需要通过refresh_token去刷新,如果refresh_token过期了,就需要重新授权。
那么问题来了:
1.我每次通过菜单点击用业务页面的时候都是无状态的,不知道当前是哪个用户点击的菜单
2.所以在这种情况下面,就算我缓存了accesstoken,也没办法就缓冲中拿去(因为token是和用户相关的)只能每次都跳转授权接口,重新走一遍accesstoken的获取流程
请问各位有什么办法,或者我忽略了什么
用 redis,键名可以用类似
userid:123456:token
,缓存时间两小时,过期则重新授权。