登录逻辑
主要流程正如官网上的这张图所示:
其中有两点是我曾经有疑惑的~
-
后端通过code向微信请求回来的session-key有什么作用呢?以及为什么前端需要在打开小程序时先确认小程序对微信的session是否失效?
session_key是后端和微信端之间的会话秘钥。微信端向后端传递的用户数据,都会需要用session_key解密。如果小程序对微信的session失效,对应着该份session_key也会失效,后端就解不出微信发回的数据了~
关键是要记住:
wx.checkSession()
=== 判断上次的wx.login()
是否还没过期 === 判断后端的session_key
是否还没过期 === 用户于微信是不是还是登陆状态 -
后端和前端应以什么数据作为用户标志?
其实和正常下,后端与前端的用户标志一样,一个有过期时间的字段即可。
所以小程序内不能以openid,只能以第三方session作为用户标志。因为openid的值是永远有效的,以此为用户标志明显会带来轻易盗用的问题。第三方session的有效期可以和微信session的有效期不相关(因为微信session的有效期并未暴露),若第三方session的有效期先到期了,刷新即可;若微信session先到期,则前端需要再次调用
wx.login
,刷新微信session及第三方session及后端的session_key。