微信网页受权SCOPE分为snsapi_base、snsapi_userinfo,前者是用户无感知的静默受权只能拿到openid;然后者须要用户确认,能拿到更多的用户信息。 数据库
我有一个系统须要进行网页受权,拿到用户信息。api
方案1:微信
只使用snsapi_useinfo受权,并把用户信息保存到数据库,30天后就从新用进行snsapi_userinfo受权cookie
弊端:实践发现不少用户换了头像,换了昵称,致使用户头像裂了,昵称对不上。增长受权频率又以为用户体验不太好。。。测试
方案2:spa
用户进 行一次snsapi_userinfo受权,保存openid、refresh_token到数据库。之后使用snsapi_api受权拿到 openid,而后根据openid用从数据库取出refresh_token,经过refresh_token获取access_token ,再经过access_token获取到用户信息。token
弊端:实践发现根本行不通,refresh_token拿access_token的时候就提示refresh_token已通过期了。。。文档
我更倾向于方案2,因而就在找refresh_token过去的缘由,后来发现snsapi_base受权也能返回access_token、refresh_token。正是因为snsapi_base受权致使了我经过snsapi_userinfo受权保存的refresh_token失效!那经过它可否拿到用户信息呢?通过实践发现snsapi_base获得的access_token也能拿到用户信息!! cookies
那这样就与官方文档冲突了。。。由于官网文档说snsapi_base受权只能拿到openid的。并且我实践也发现,有时snsapi_base受权获得的access_token是拿不到用户信息的,用户体验
那么有这种可能,那就是若是用户以前进行了snsapi_userinfo受权,那么在必定时间内进行snsapi_base受权拿到的access_token是能够拿到用户信息的,这个时间就很差测试了。
我想请教下了解微信网页受权的同窗,是否是如我猜测的这样?若是是,那么进行snsapi_userinfo受权后屡次时间进行snsapi_base受权能够拿到用户信息。请对这方面了解的同窗不吝赐教~~
---------------问题补充---------------
把openid保存到cookies能够避免使用snsapi_base受权去拿openid致使snsapi_useinfo受权获得的refresh_token失效,可是没法保证openid的准确性。极端状况下考虑有人有多个微信号。。。