说说微信小程序的登录流程?

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

一、背景

传统的web开发实现登陆功能,一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录

服务端校验用户信息通过之后,下发一个代表登录态的 token 给客户端,以便进行后续的交互,每当token过期,用户都需要重新登录

而在微信小程序中,可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系,从而实现登陆功能

实现小程序用户体系主要涉及到openidcode的概念:

  • 调用wx.login()方法会生成code,将code作为参数传递给微信服务器指定接口,就可以获取用户的openid

对于每个小程序,微信都会将用户的微信ID映射出一个小程序 openid,作为这个用户在这个小程序的唯一标识

二、流程

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

  • 通过 wx.login() 获取到用户的code判断用户是否授权读取用户信息,调用wx.getUserInfo 读取用户数据
  • 由于小程序后台授权域名无法授权微信的域名,所以需要自身后端调用微信服务器获取用户信息
  • 通过 wx.request() 方法请求业务方服务器,后端把 appid , appsecret 和 code 一起发送到微信服务器。 appid 和 appsecret 都是微信提供的,可以在管理员后台找到
  • 微信服务器返回了 openid 及本次登录的会话密钥 session_key
  • 后端从数据库中查找 openid ,如果没有查到记录,说明该用户没有注册,如果有记录,则继续往下走
  • session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输
  • 然后生成 session并返回给小程序
  • 小程序把 session 存到 storage 里面
  • 下次请求时,先从 storage 里面读取,然后带给服务端
  • 服务端对比 session 对应的记录,然后校验有效期

更加详细的功能图如下所示:

三、扩展

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

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

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

  • 如果过期,则发起完整的登录流程
  • 如果不过期,则继续使用本地保存的自定义登录态

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


更多前端资源==> GitHub

参考文献

  • https://segmentfault.com/a/1190000016750340
  • https://juejin.cn/post/6955754095860776973
  • https://www.cnblogs.com/zwh0910/p/13977278.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/339466.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线(添加约束文件)、生成比特流文件、烧录等步骤&a…

计算机网络期末复习(二)

物理层 解决:如何在连接各种计算机的传输媒体上传输比特流,而不是具体的传输媒体。 传输媒体:比如双绞线、同轴电缆、光纤等等。 主要任务:确定于传输媒体接口有关的一些特性。 传输媒体 导向形 非导向形 调制解调器 数字信号 和…

GSEQ行为序列分析软件学习汇总

0、问题描述: 1、GSEQ软件是做什么的?2、GSEQ软件如何使用?2、GSEQ软件前期需要在“记事本”中编写“程式码”需要将所有行为数据编码之后,将编码行为序列粘贴到GSEQ软件中去,如果数据量很大,这个过程就非…

图纸版本管理混乱怎么办?彩虹PDM系统帮你搞定!

在现代制造业和工程领域,图纸版本管理的混乱常常是一个棘手的问题。不同版本的图纸可能导致严重的错误和生产问题,影响了产品质量和交付时间。然而,有一个强大的工具可以帮助企业解决这个问题,那就是PDM产品数据管理系统。彩虹PDM…

如何在 Microsoft Edge 浏览器中启用自动刷新

你是否经常发现自己在使用 Microsoft Edge 时点击刷新按钮?如果您需要一个网页以设定的时间间隔自动更新,那么请接着往下看。 在这篇博文中,我们探讨如何在 Microsoft Edge 浏览器中启用和管理自动刷新功能。 为什么选择自动刷新&#xff1…

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1:准备 1.1:理论 对于一个系统来说,最重要的就是高可用,那么如何实现高可用呢?你可能会说,集群部署不就可以了,但事实并…

SpringBoot+Vue药品ADR不良反应智能监测系统源码

药品不良反应(Adverse Drug Reaction,ADR)是指合格药品在正常用法用量下出现的与用药目的无关的有害反应,不包括超说明书用药、药品质量问题等导致的不良后果。 ADR智能监测系统开发环境 ❀技术架构:B/S ❀开发语言&…

2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲…

【MySQL】视图,15道常见面试题---含考核思路详细讲解

目录 一 视图 1.1视图是什么 1.2 创建视图 1.3 查看视图(两种) 1.4 修改视图(两种) 1.5 删除视图 二 外连接&内连接&子查询介绍 2.1 外连接 2.2 内连接 2.3 子查询 三 外连接&内连接&子查询案例 3.1 了解表结构与数据 3.2 15道常见面试题 四 思…

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享

亲爱的读者们,欢迎来到本篇博客,这是JVM第七次分享,下面是七个JVM常用常面的分享,请笑纳 目录 1. 几个与JVM 内存相关的核心参数2.如何计算一个对象的大小3.堆为什么要分为新生代和老年代4.JVM堆的年轻代为什么要有两个 Survivor…

解密Spring Boot的快速启动引擎:揭秘背后的秘密

目录 1、前言 2、什么是Spring Boot 3、Spring Boot的快速启动引擎 3.1 自动配置 3.2 简化的依赖管理 3.3 内嵌式容器 3.4 自动化部署 4、Spring Boot的核心原理 4.1 Spring Boot的启动流程 4.2 Spring Boot的自动配置原理 4.3 Spring Boot的依赖管理原理 4.4 Spri…

ChatGPT新出Team号 年付费

之前一直传的团队版ChatGPT终于来了,这个对拼单的比较合算。每人每月25美元,只能按年支付。 团队版比普通版多的权益有: ◈更多的GPT-4消息上限,三小时100次。 ◈可以创建与团队内部共享的GPTs。 ◈用于工作空间管理的管理员控…