基于微信小程序的PC后台扫码登录全流程解析

HDFS JAVA API(Hadoop3.0) 1.HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础篇,为了实现本地与HDFS的文件传输,主要借助Eclipse开发环境,通过java编程实现了远程HDFS的文件创建,上传,下载,删除等。在my.hdfs包下,新建类PutMerge,程序功能是将Linux本地文件夹/data/hadoop4/下的所有文件,上传到HDFS上并合并成一个文件/hdfstest/mergefile。 阅读详情

1. 为什么我们需要扫码登录?一个更优雅的登录方式

想象一下这个场景:你正坐在电脑前,准备登录某个系统的后台管理页面。通常,你需要输入一长串用户名和密码,可能还得应付烦人的图片验证码。这时,你掏出手机,打开对应的小程序,对着屏幕上的二维码“滴”一下,然后在手机上点一下“确认登录”,电脑页面就自动跳转进去了。整个过程行云流水,连键盘都不用碰。

这就是基于微信小程序的PC端扫码登录。它不仅仅是为了“酷”,而是实实在在地解决了几个痛点。首先,安全性更高。传统的账号密码登录,密码存在泄露、被撞库的风险。而扫码登录的本质是用你已经登录的、可信的设备(手机)去授权一个新设备(电脑),密码不参与传输,大大降低了风险。其次,用户体验极佳。用户无需记忆和输入复杂的密码,尤其是在手机已经常态化使用的今天,扫码动作非常自然。最后,对于开发者而言,它统一了用户体系。很多系统既有小程序端用户,又有后台管理用户,扫码登录能优雅地将两者关联起来,实现“一端登录,多端互通”。

我在多个企业级项目中落地过这种方案,实测下来,用户接受度非常高,登录成功率也显著提升。接下来,我就以国内流行的若依(RuoYi) 后台管理系统为基础,为你拆解这套流程从生成二维码到最终登录成功的每一个技术细节。你会发现,它的核心逻辑并不复杂,关键在于几个状态的有效流转和前后端的紧密配合。

2. 核心流程全景图:一张图看懂扫码登录

在深入代码之前,我们必须把整个交互的“剧本”搞清楚。扫码登录不是单一的动作,而是PC网页、微信小程序、后端服务器三方协同演出的一场戏。这场戏大致可以分为四个关键幕次:

  1. 第一幕:生成凭证(PC端发起)。用户访问PC后台登录页,页面自动向后端请求一个登录二维码。后端生成一个全局唯一的UUID作为本次登录会话的“票根”,并将这个UUID编码进二维码图片中,以Base64格式返回给前端展示。同时,后端在Redis等缓存中,以这个UUID为键,初始化一个状态记录,状态设为“未扫描”(NOT_SCAN),并设置一个有效期(比如5分钟)。
  2. 第二幕:扫描与状态更新(小程序端操作)。用户用微信小程序扫描屏幕上的二维码。小程序解析出二维码中的UUID,然后调用后端接口,上报“我扫到UUID为XXX的码了”。后端收到请求后,将Redis中该UUID对应的状态从“未扫描”(NOT_SCAN)更新为“已扫描”(SCANNED)。此时,PC端通过轮询会感知到状态变化,页面提示“扫描成功,请在手机端确认”。
  3. 第三幕:授权与令牌下发(小程序端确认)。小程序端展示一个确认登录的界面,用户点击“确认登录”。小程序再次调用后端接口,传递UUID进行最终授权。这是最关键的一步:后端根据小程序的登录凭证(通常是小程序wx.login获取的code换得的openid或unionid),查询出该微信用户绑定的后台系统用户。然后,为这个系统用户生成一个标准的登录令牌(Token),并将这个Token存入该UUID对应的Redis记录中。最后,将状态更新为“已校验”(VERIFIED)。
  4. 第四幕:登录完成(PC端轮询到结果)。PC端一直在轮询查询UUID的状态。当轮询发现状态变为VERIFIED时,会同时从接口响应中拿到后端存入的Token。前端拿到这个Token,就像普通登录成功一样,将其存储到本地(如Cookie或LocalStorage),并跳转到系统主页,完成登录。

整个流程的核心在于**UUID和与之绑定的状态机**,以及Redis作为中间状态存储的桥梁作用。PC端和小程序端不直接通信,全部通过后端对同一个UUID的状态进行操作来实现间接“对话”。

3. 后端基石:状态定义与二维码生成服务

后端是整个流程的指挥中心,我们先从最基础的部分搭建起。

3.1 定义清晰的状态枚举

首先,我们需要用常量来明确定义二维码在整个生命周期中的几个状态,这能让代码更清晰,避免魔法字符串。我习惯单独建一个常量类。

package com.ruoyi.login.constant;

public class QrCodeStatus {
    // Redis存储UUID键的前缀,方便管理和查找
    public static final String UUID_KEY_PREFIX = "login:qrcode:";
    // 状态:未扫描
    public static final String NOT_SCAN = "NOT_SCAN";
    // 状态:已扫描(等待确认)
    public static final String SCANNED = "SCANNED";
    // 状态:已确认(校验通过)
    public static final String VERIFIED = "VERIFIED";
}

这里我加了一个UUID_KEY_PREFIX,这是实际项目中很好的实践。把所有扫码登录相关的Redis键都归拢到login:qrcode:这个命名空间下,比如键名会是login:qrcode:550e8400-e29b-41d4-a716-446655440000,这样在Redis可视化工具里一目了然,也避免了键名冲突。

3.2 生成携带UUID的二维码

生成二维码,我推荐使用谷歌的ZXing库,非常稳定。在若依的pom.xml中添加依赖:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.5.3</version>
</dependency>

然后创建一个生成二维码Base64字符串的服务。这里有个细节需要注意:直接生成的Base64字符串,前端<img>标签的src属性是无法直接识别的,需要加上前缀data:image/png;base64,。

@Service
public class ScanServiceImpl implements IScanService {
    @Override
    public String createQrCode(String content, int width, int height) throws IOException {
        if (StringUtils.isEmpty(content)) {
            return null;
        }
        // 使用ByteArrayOutputStream在内存中操作图片
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 编码
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 容错率
        hints.put(EncodeHintType.MA
微信小程序实现的网页扫码授权登录(完全免费) 现如今,扫码登录已经在网站普遍应用,其中微信扫码登录极其普遍。但是微信扫码登录的实现方法有多种,大多数都是具有一些门槛的。例如企业、需要服务号、需要认证等,这些都是个人开发者,个人创作者无法使用的。 但其实,微信小程序也可以作为一个授权登录的“中介”,因为微信小程序有一个 wx.login 的API可以轻松实现获取openid来作为微信用户的鉴权。 阅读详情

相关推荐

PHP微信第三方扫码登录技术问题

PHP微信第三方扫码登录技术问题

qq_16453867的博客 4865

微信小程序开发 - 用户授权登陆 / 扫码登录流程讲解、获取授权登陆二维码

微信协议就是基于微信IPad协议的智能控制系统,利用人工智能AI技术、云计算技术、虚拟技术、边缘计算技术、大数据技术,打造出智能桌面系统RDS 、 智能聊天系统ACS 、智能插 件系统PLUGIN 、云计算服务CCS 、任务管理系统 TM 、设备管理服务DM、 应用管理系统AM、 统一 好友系统UUS 、任务运行系统RT 、虚拟环境系统 VAC、智能监控系统ISS、 数字资产系DES,帮助企业快速连接客户,创造营销氛围,实现自动获客、自动传播、自动转化、智能营销等分布式营销服务。4、用户扫码确定授权。

2302_76405773的博客 3818

SpringBoot实现微信扫码登录:4步避坑指南,一文搞定

产品经理一句话,开发懵逼一整天?微信扫码登录到底难在哪?别被OAuth2的术语吓住,本质就是一场手机确认、PC登录的“身份接力”。本文手把手带你用SpringBoot打通全流程:从开放平台配置、二维码生成,到回调处理、用户信息获取,全程图解+代码实战。重点避坑——state防伪造、scope别选错、AppSecret别硬编码。还送前端轮询、Redis防重放等进阶技巧。看完你也能自信说出:这需求,明天上线。

m0_72340523的博客 915

UniApp微信小程序扫码功能全解析:从API调用到自定义界面与业务实践

扫码功能作为移动应用开发中的基础交互技术,其核心原理是通过摄像头捕获图像并利用识别算法解析其中编码的信息。这项技术在现代商业应用中具有极高的价值,是实现商品核销、身份验证、设备配对等场景的关键。在UniApp跨端框架中,开发者通过封装后的`uni.scanCode`API调用微信小程序原生能力,这为功能实现带来了便利,但也需处理权限管理、性能优化等工程实践问题。本文聚焦于`uniapp`和`微信小程序`环境,深入探讨如何构建一个兼顾流畅度与成功率的扫码方案,涵盖从基础API调用、自定义扫码界面开发到复杂业务

weixin_30740295的博客 376

微信小程序扫码登录WEB端实战指南

小程序扫码登录是一种基于OAuth 2.0思想的跨端身份认证机制,其核心原理是通过微信开放平台提供的标准协议链,将小程序内已授权的用户身份(UnionID)安全、可信地传递至WEB端。该方案规避了手机号验证的弱实名缺陷与公众号授权的高流失率问题,具备强安全性、低侵入性和高转化价值。广泛应用于企业官网、SaaS后台、内部管理系统等需快速打通小程序与PC端用户体系的场景。本文聚焦‘小程序扫码登录’这一具体能力,详解从开放平台配置、AES加密token生成、动态二维码集成到后端验签落地的全链路实践。

weixin_28713299的博客 93

微信扫码登录全流程解析:从OAuth 2.0原理到实战避坑指南

OAuth 2.0是一种开放授权标准协议,它允许用户授权第三方应用访问其存储在服务提供者上的资源,而无需共享用户名和密码。其核心原理是通过授权码模式,在用户、客户端、授权服务器和资源服务器之间建立安全的授权流程。这一机制在第三方登录场景中具有重要技术价值,能够有效平衡用户体验与安全性,广泛应用于社交平台登录、API授权等场景。在微信生态中,OAuth 2.0被具体实现为微信扫码登录功能,它涉及微信开放平台、业务服务器、用户浏览器和微信客户端四者协同。本文将深入解析微信扫码登录的完整流程,重点剖析授权回调域配

weixin_26642481的博客 280

游戏扫码登录小程序源码完整实战项目

当多个页面共用相同结构(如二维码说明弹窗)时,可使用<template>提高复用率。</view>引用模板:data: {tipData: {content: '请使用微信扫描上方二维码完成登录'✅ 优势:降低重复代码,提升维护效率。创建组件目录,包含四个文件:组件配置文件声明:WXML 结构:<slot /> <!-- 插槽接收外部内容 --></view>JS 定义属性与方法:value: ''},methods: {});

weixin_35756130的博客 1081

多节阶梯阻抗变换器工程设计的公式推导

  多节阶梯阻抗变换器工程设计的公式推导,仔细看此文,有点烧脑,所以碎片十分钟,收获一丢丢。   现在就来设计一个超宽带多节阶梯阻抗变换器,要求带内纹波符合切比雪夫分布。   其实,此文已经是省去了大量中间公式推导,只剩下精炼内容了。   阶梯阻抗变换器指标需求   假设现在有一项目需求分析结果是:做一个微带线超宽带阶梯阻抗变换器,指标如下:   从50欧变换到100欧;   回波损耗22dB;   功率容量:2W;   频率范围2~18GHz;   插损能做多少就多少,用30mil板厚.

wusuowei1010的博客 7806

monocle3-单细胞轨迹分析在疾病研究中的应用

本文深入探讨了monocle3在单细胞轨迹分析中的核心应用,特别是在疾病研究领域。通过实战案例,详细讲解了如何利用monocle3进行轨迹推断,构建细胞状态演变的“路线图”,并结合伪时间分析定位疾病进展阶段。文章还介绍了如何挖掘驱动疾病发展的关键基因,并分享了数据整合、根节点选择等进阶技巧与避坑指南,旨在帮助研究者利用这一强大工具揭示肿瘤异质性、免疫治疗耐药等复杂生物学过程的动态机制。

a3b4c5的博客 638

《深入浅出强化学习原理入门》学习笔记(三)机器人找金币应用实例

《深入浅出强化学习原理入门》学习笔记(三)MDP应用实例

lxs3213196的博客 3187

【宝藏级】全网最全的Pandas详细教程(2万字总结)

【回炉重造】Python之Pandas详细教程前言为什么要学习pandas?什么是Pandas?官网1. Pandas的索引操作索引对象Index {#索引对象index}1. Series和DataFrame中的索引都是Index对象2. 索引对象不可变,保证了数据的安全常见的Index种类Series索引 {#series索引}1. index 指定行索引名2. 行索引3. 切片索引4. 不连续索引5. 布尔索引DataFrame索引1. columns 指定列索引名2. 列索引3. 不连续索引高级索引

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 6万+

Xilinx平台SRIO介绍(一)RapidIO协议介绍

菜鸟到老鸟:会用工具; 老鸟到大佬:深入理解原理。 ——FPGA大叔·沃自己硕得

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

《拉依达的嵌入式\驱动面试宝典》—Linux篇(八)_Linux驱动编程

《拉依达的嵌入式\驱动面试宝典》 整合了所有我认为可能遇到的技术面试问题。所有问题及其答案均是我个人学习后查阅资料总结,每个回答都做了仔细的分析,在嵌入式及其驱动面试相关问题解析做到全网独一无二。学习或者转行到嵌入式、驱动开发领域学习的不二之选

拉依达不拉跨的博客 319

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 373

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1918

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: PaddleX视频目标检测实战:从图片预测到视频流处理的完整实现
下一篇: 温度缩放:从模型校准到隐私盾牌,抵御对抗性样本的成员推断攻击
raspberrypi5
博客等级 码龄1天 0粉丝 1856原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值