背景
有个基于微信公众号的产品,会展示用户信息。
如果用户未关注公众号,微信静默授权(scope:snsapi_base)则拿不到昵称(nickname)。如果想拿到昵称就只能显式授权(scope:snsapi_userinfo)。
优化
为了保证已关注用户的体验,应该是用静默授权。拿到openid,查询是否已经保存了用户信息。如果没有,则再显示授权,拿到用户信息后,保存到数据库。这样,用户虽说未关注,但下次访问时就不需要显示授权了(当session过期后,仍旧需要跳转到显示授权页面,但微信可能会提示:近期已经授权过,就自动跳回来了~)。
细节
设:静默授权拿到的用户信息为base,显式授权拿到的信息为detail。
未关注用户:
静默授权,base中nickname为null,detail不包含nickname字段
显示授权,base中nickname为用户昵称,detail中不包含nickname字段
已关注用户:
静默授权,base中nickname为null,detail中nickname字段为用户昵称
无需显示授权~
这里还需要注意一下~ 跳转授权页面要防止无限循环跳转~ 代码逻辑写健壮点儿~ 否则微信会封公众号的授权一段时间(几分钟)别问我怎么知道的。。。