当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

面试官:说说微信小程序的登录流程?

作者:灰色来源:JS每日提问

一、背景

传统的web开发实现登录功能,一般方法是输入账户密码或输入手机号码和短信确认代码登录

在服务器端验证用户信息后,为了后续交互,将向客户端发送指示登录状态的令牌,每当令牌过期时,用户都必须重新登录

在微信小程序中,通过微信官方登录功能,可以轻松获得微信提供的用户ID,还可以快速构建小程序内的用户系统,实现登录功能。

小程序用户系统的实现主要包括OpenID和代码的概念。

调用Wx.login()方法会生成code,并将code作为参数传递到微信服务器上的指定接口,从而获取用户的openID。对于每个applet,微信将用户的微信ID映射到applet OpenID,并在此applet中使用该用户的唯一id

二、过程

微信小程序登录的具体实现逻辑如下图所示。

通过Wx.login()获取用户的代码,确定用户是否有权读取用户信息,并调用wx.getUserInfo读取用户数据。因为小程序后台权限域名不能接受微信域名,所以自己的后端调用微信服务器通过wx.request()方法请求业务服务器以获取用户信息,后端请求app

appid 和 appsecret 都是微信提供的,可以在管理员后台找到
  • 微信服务器返回了 openid 及本次登录的会话密钥 session_key
  • 后端从数据库中查找 openid ,如果没有查到记录,说明该用户没有注册,如果有记录,则继续往下走
  • session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输
  • 然后生成 session并返回给小程序
  • 小程序把 session 存到 storage 里面
  • 下次请求时,先从 storage 里面读取,然后带给服务端
  • 服务端对比 session 对应的记录,然后校验有效期
  • 更加详细的功能图如下所示:

    三、扩展

    实际业务中,我们还需要登录态是否过期,通常的做法是在登录态(临时令牌)中保存有效期数据,该有效期数据应该在服务端校验登录态时和约定的时间(如服务端本地的系统时间或时间服务器上的标准时间)做对比

    这种方法需要将本地存储的登录态发送到小程序的服务端,服务端判断为无效登录态时再返回需重新执行登录过程的消息给小程

    另一种方式可以通过调用wx.checkSession检查微信登陆态是否过期:

    如果过期,则发起完整的登录流程

    如果不过期,则继续使用本地保存的自定义登录态

    这种方式的好处是不需要小程序服务端来参与校验,而是在小程序端调用AP,流程如下所示:

    参考文献

    1.《面试官:说说微信小程序的登录流程?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

    2.《面试官:说说微信小程序的登录流程?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

    3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3203936.html

    上一篇

    程序应用图标不见了怎么办看这里!10个让你相见恨晚的App

    下一篇

    打印出来的资料突然出现乱码,该怎么办?

    程序怎么给授权?我来告诉你答案科普:小程序登陆授权开发、生成的流程

    • 程序怎么给授权?我来告诉你答案科普:小程序登陆授权开发、生成的流程
    • 程序怎么给授权?我来告诉你答案科普:小程序登陆授权开发、生成的流程
    • 程序怎么给授权?我来告诉你答案科普:小程序登陆授权开发、生成的流程
    程序怎么给授权?我来告诉你答案5个要点,避免踩坑小程序

    程序怎么给授权?我来告诉你答案5个要点,避免踩坑小程序

    程序怎么给授权相关介绍,小程序是产品形式的一种,比App轻,比网页简洁,但依赖于微信生态系统,因此必须遵守微信生态规则。 作为产品经理,参与小程序产品迭代已有四个月,踩过不少坑;经历几次迭代,对小程序规则有了一定了解。希望在...