微信小程序授权登陆流程
- 登陆流程图
- 前端调用
1. 前端调用wx.login获取code,再调用后端自定义接口把code传给后端。需要注意的是,这个code只是临时的,只有5分钟的使用时间,而且只能使用一次。
2. 后端用获取的code与微信接口服务换取openid(用户唯一标识)与session_key(会话密钥,可以用于解密私密信息encrydata,现在只能获取头像和昵称),关联openid和session_key自定义登录态session,利用session生成token,不可以把解析出来的openid和session_key直接返回给前端,会造成信息安全问题。
3. 后端将token返回给前端。
4. 前端缓存token,存wx.setStorageSync,取wx.getStorageSync。
5. 用户登录时,登录接口获取到token,再调用其他接口时,拦截器进行拦截,如果token有效,则放行请求;如果token失效(不存在、过期、格式不正确等原因),则无法访问该接口,需要重新登录。
如果觉得token验证太过复杂,也可以退而求其次,采用微信小程序自带的wx.checkSeesion检查下发的session_key是否过期(固定为两天)。
wx.checkSeesion是前端检查,非常方便,但是缺点也很明显:耗时长,通常需要300+ms ,另外前后端传递私密数据时,需要额外考虑数据安全问题(以openid为例,前端每次需要传递openid时,都需要先获取临时code,再传递给后端,后端再用code换取openid,开销极大),因此正式开发时极不建议使用wx.checkSeesion,token验证方式可以较好解决上述问题。
- 获取用户信息的接口wx.getUserProfile
由原来的wx.getUserInfo更换为wx.getUserProfile,可直接获取到用户的昵称和头像。