作者:灰色来源:JS每日提问
一、背景
传统的web开发实现登录功能,一般方法是输入账户密码或输入手机号码和短信确认代码登录
在服务器端验证用户信息后,为了后续交互,将向客户端发送指示登录状态的令牌,每当令牌过期时,用户都必须重新登录
在微信小程序中,通过微信官方登录功能,可以轻松获得微信提供的用户ID,还可以快速构建小程序内的用户系统,实现登录功能。
小程序用户系统的实现主要包括OpenID和代码的概念。
调用Wx.login()方法会生成code,并将code作为参数传递到微信服务器上的指定接口,从而获取用户的openID。对于每个applet,微信将用户的微信ID映射到applet OpenID,并在此applet中使用该用户的唯一id
二、过程
微信小程序登录的具体实现逻辑如下图所示。
通过Wx.login()获取用户的代码,确定用户是否有权读取用户信息,并调用wx.getUserInfo读取用户数据。因为小程序后台权限域名不能接受微信域名,所以自己的后端调用微信服务器通过wx.request()方法请求业务服务器以获取用户信息,后端请求app
appid 和 appsecret 都是微信提供的,可以在管理员后台找到更加详细的功能图如下所示:
三、扩展
实际业务中,我们还需要登录态是否过期,通常的做法是在登录态(临时令牌)中保存有效期数据,该有效期数据应该在服务端校验登录态时和约定的时间(如服务端本地的系统时间或时间服务器上的标准时间)做对比
这种方法需要将本地存储的登录态发送到小程序的服务端,服务端判断为无效登录态时再返回需重新执行登录过程的消息给小程
另一种方式可以通过调用wx.checkSession检查微信登陆态是否过期:
如果过期,则发起完整的登录流程
如果不过期,则继续使用本地保存的自定义登录态
这种方式的好处是不需要小程序服务端来参与校验,而是在小程序端调用AP,流程如下所示:
参考文献
1.《面试官:说说微信小程序的登录流程?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《面试官:说说微信小程序的登录流程?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3203936.html