首页 > 编程语言 >微信小程序扫码登录

微信小程序扫码登录

时间:2023-05-03 12:22:56浏览次数:42  
标签:状态 扫码 登录 微信 程序 用户 scene

实现微信小程序扫码登录

先上效果

image

实现流程图

image

流程图解释

  1. 用户访问网页打开扫码登录
  2. 加载携带唯一登录标识小程序码
  3. 用户扫码打开,同步状态为已扫码
  4. 网页端轮询请求状态是否为已授权登录
  5. 登录成功,获取Token跳转系统
  6. 登录失败,可刷新码重新扫码

小程序码选择

小程序文档
这里我们选择 获取不限制的小程序码 来生成登录码,其余两个有数量限制。小程序链接有企业限制,所以用这个最优,都可以用。
image

实操

1、生成登录二维码

获取不限制的小程序码可以传递一个scene参数,这个参数我们可以用来放我们自定义的内容,比如这里我们生成的时候可以存放本次生成的登录唯一标识。
根据这个唯一标识为key,设置一个临时存储,值目前可以设置一个登录状态来标识此码的状态,用来做后续的登录逻辑支撑。这个推荐放入缓存,设置几分钟过期时间。
这个缓存很重要,会贯穿我们整个登录的上下文

  • 注意scene最大字符为32个,具体限制见下图或小程序文档
  • 获取小程序接口请求token就略过了,能做这个需求就默认已经用过小程序的Api了
  • 若系统有高并发登录量,可提前预生成这个不限制的码(微信限制该接口5000次/分钟)
    image

2、微信扫码打开

微信扫码上一步中生成的码会跳到生成时指定的page页面,可以在onload周期方法中获取到scene参数的值。
根据scene参数为key查找此次登录的缓存是否存在,状态是否为未扫码,小程序是否可以展示登录按钮等
逻辑都无误后可以调用后端接口,将接口状态改为已扫码,网页登录界面可以展示码的状态为已扫码,防止一个码被多人使用

3、小程序执行登录逻辑

可以在小程序页面中自定义登录样式,引导用户执行登录流程。
这里需要注意登录的两个要素:

  1. 该用户扫的哪个码,就是我们在进入登录页面时解析拿到的scene参数的值
  2. 需要告诉后端服务当前是哪个小程序用户在登录
    • 这里我是将scene和小程序登录code一并传入后端,后端通过小程序登录接口拿code就可以换到小程序用户的openid,确定是哪个用户登录了
    • 如果小程序用户在应用中已登录,也可以通过小程序在应用中登录的token,来确定用户
    • 不做扩展了,只要能确定是哪个用户登录,各个方式都可以。

4、后端服务判断登录逻辑

后端收到小程序登录执行动作,根据接收的登录唯一标识值,也就是解析的scene参数值,来判断登录状态是否正常
根据收到的小程序唯一用户标识,来判断用户是否正常
确定逻辑都正确后,将该用户信息写入缓存的值中,并将登录状态设置为已成功。

5、登录成功

网页在展示了登录码之后,应该一直处于轮询状态,这个轮询的时间间隔可以由开发者自定。
一旦发现获取到的登录状态为成功,则应立即后端调用登录成功接口,获取token,跳转完成此次登录。

6、登录失败

登录状态为失败时,网页端应给予刷新登录码操作,让用户可以重新执行该流程。

重点概括

登录唯一标识:自生成的参数值,我这里采用guid除去-刚好32位。
image

登录状态:可以自定义标识整个登录周期中的状态。例:

  • 0:未扫码
  • 1:已扫码
  • 2:登录成功
  • -1:登录失败

image

登录缓存:这个数据只在当前用户的登录流程中使用,使用缓存可提高性能。且可设置过期时间,用完即弃。
image

至此就完成小程序扫码登录了

标签:状态,扫码,登录,微信,程序,用户,scene
From: https://www.cnblogs.com/kingling/p/17364441.html

相关文章

  • security中登录失败后没有走登录失败拦截器
    在进行security做用户登录时,会创建一系列的拦截器和过滤器,在进行用户校验时,我这边采用的是继承UsernamePasswordAuthenticationFilter,然后重写其中的attemptAuthentication和successfulAuthentication方法,但是在校验失败后,没有走校验失败拦截器。publicclassJwtAuthentication......
  • 【转】Ubuntu系统Gnome桌面设置允许root登录
    转自https://www.cnblogs.com/tonyc/p/10432871.html设置方法如下:vi/etc/pam.d/gdm-autologin找到下面这一行authrequiredpam_succeed_if.souser!=rootquiet_success在最前面加上#注释掉。对/etc/pam.d/gdm-password进行同样的操作,重启。......
  • Ubuntu中开启root用户ssh远程登录
    1.将用户和Shell环境一起切换成root身份su-root2.编辑sshd_config文件vi/etc/ssh/sshd_config3.修改配置默认的Authentication区块#Authentication:#LoginGraceTime2m#PermitRootLoginprohibit-password#StrictModesyes#MaxAuthTries6#MaxSessions10修......
  • 微信公众号网页登录,获取用户信息
    0、参考wechat登录前端代码.zip下载后端java代码下载1、接口信息配置请填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证URL=http://自己的域名/rest/WeChat/verifyToken=123456792、JS接口安全域名域名=自己的域名3、网页......
  • 微信支付——介入指引
    一、业务平台介绍:1.微信公众平台微信公众平台是微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。2.微信开放平台微信开放平台是商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。3.微信商户平台......
  • 关于Linux操作系统-OS等保要求配置-禁止root用户直接ssh登录
    在等保中,都会去要求查看sshd配置,看是否有禁止root用户直接ssh登录,此项一般也会作为一个强制要求安全配置项笔者这里的操作系统如下,对于Redhat7.x应该也是一样的,可以自行测试[qq-5201351@Localhost~]$cat/etc/redhat-releaseRedHatEnterpriseLinuxrelease8.1(Ootpa)......
  • B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能
    B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能@目录B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能每博一文案1.Cookie的概述2.session与Cookie之间的联系:3.Cookie的作用:4.Cookie的生成机理的原理:5......
  • 关于Linux操作系统OS账号最后一次登录时间的审计
    本文以RedHatEnterpriseLinuxrelease8.1(Ootpa)为例,应该也能适用于7.x版本的如果对操作系统中的账号审计,其中有一个项目可能会比较重要(尤其是对于个人账号),那就是最后一次登录的记录如果需要查看每一个OS账号的最后一次登录记录,可以使用lastlog命令[qq-5201351@localho......
  • 微信小程序-icon组件
    icon组件icon组件,想必大家都应该清楚这个是图标组件吧,在微信小程序当中,为我们提供了一套icon图标类型。?>icon的类型,有效值:success,success_no_circle,info,warn,waiting,cancel,download,search,clear我们就来看一下icon当中的属性值即可。属性?>type:icon的类型......
  • javaweb用户登录界面
    实验名称用户登录界面成绩评定所用仪器材料eclipsetomcatwin11实验目的或要求1.实验目的使用JSP实现用户登录验证。2.实验内容通过创建一个用户登录的页面,让用户输入正确的用户名、密码,并进行校验,若用户名和密码输入正确,则弹出您好,你的名字首字母,否则弹出用户名或密码错误,请重新输......