根据文档,微信网页授权步骤为:获取code(呼出授权界面) => 获取access_token => 获取用户信息。
文档和大部分博客只是将文档照搬,或者将其中坑点做了说明。但是有些工程上的问题,没有做具体方案上的讲解:
- 如何减少向微信服务器获取用户信息的次数;
- 如果需要做必要信息的持久化,使用何种策略,既保证安全,又能兼顾效率;
我们知道,微信服务器的API(非后台业务API)都是有请求次数的限制的,并且每次走微信服务器的API(比如微信网页授权过程)存在时间长、步骤复杂的问题。
所以,我打算在第一次访问我们的微信公众号H5页面时,走一次完整的显式授权(即呼出授权界面的网页授权)。再授权结束时,将返回的openID存储到本地cookie,将整个用户信息推送到业务服务器以openID为主键存储。
当第二次访问H5时,首先检查cookie中是否有openID,如果有则拿着openID找后端用户信息;如果没有openID,则再发起一次完整的显式授权。
使用这种方法,可以减少向微信服务器获取数据的次数。但是随之而来的问题是,cookie的本地存储策略问题。
- 如果本地cookie设置过期时间,那么在过期之前,如果用户修改了诸如头像、微信名称,H5永远获取不到最新的用户信息;
- 如果本地cookie设置为关闭浏览器就清除,那么每次进H5页面,都需要授权。
不知道各位是否有必要成熟的方案,帮忙解决以上问题,感谢指点。优秀方案,有偿采纳。感谢!
这种都是取舍
1.头像、微信名称是否重要?现在很多时候,用户并不关心头像,昵称,或者你再做一个功能,以第一次授权时的头像为用户头像,后续用户可以在你的程序中手动修改头像
2.微信网页将本地cookie设置为关闭浏览器就清除,好像并没有什么人做这个事情,或者你可以放到local中