小程序扫码登录pc后台

微信小程序实现的网页扫码授权登录(完全免费) 现如今,扫码登录已经在网站普遍应用,其中微信扫码登录极其普遍。但是微信扫码登录的实现方法有多种,大多数都是具有一些门槛的。例如企业、需要服务号、需要认证等,这些都是个人开发者,个人创作者无法使用的。 但其实,微信小程序也可以作为一个授权登录的“中介”,因为微信小程序有一个 wx.login 的API可以轻松实现获取openid来作为微信用户的鉴权。 阅读详情

目录

一、效果图

二、前置条件

三、实现逻辑

四、PC后台页面代码

1、后台登录页面

2、扫码登录页面

 3、请求到后端的接口qrcode.js

五、微信小程序页面代码

1、扫码登录按钮 

2、确认授权页面AuthToPC

3、请求到后端的接口qrcode.js

 六、后端java处理代码

1、定义扫码状态常量类 

2、ScanController类(对应后台接口)

3、WxScanController类(对应微信小程序接口)

4、IScanService类

 5、ScanService类


一、效果图

二、前置条件
  • 基于uniapp小程序+若依后台

  • 微信用户登录后必须绑定系统用户,最终扫描还是利用已创建的系统用户登录

  • 其他的实现方式是已校验以后,使用Feign走系统用户登录流程,但该种方式需要将系统用户的密码解密出来,若依的密码加密方式无法反向解密,所以操作不了。 

三、实现逻辑
  • 后台请求到后端,创建uuid,通过工具类生成二维码,并将二维码转成Base64编码发给前端。
  • 前端接收到Base64码直接展示成二维码图片,此时调查询二维码状态轮询,当二维码状态为已校验,就缓存token,走拉取系统用户权限流程。
  • 微信小程序扫码获取到uuid,拿uuid去查询当前二维码状态,如果为未扫码,请求到后端改变扫码状态为已扫码,更改成功后跳转到授权确认界面。
  • 点击确认授权,此时将扫码状态改为已校验,然后获取该微信用户绑定的系统用户,缓存该系统用户对应的token及用户菜单权限,等PC轮询拉到该数据就可以登录成功。
四、PC后台页面代码
1、后台登录页面
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">  
	<h3 class="title">商业旅游管理系统</h3>  
	  
	<el-tabs v-model="activeName" type="card" @tab-click="handleClick">  
		<el-tab-pane label="扫码登录" name="first"></el-tab-pane>  
		<el-tab-pane label="账号登录" name="second"></el-tab-pane>  
	</el-tabs>  
	
	<div v-if="activeName=='second'">  
		<!--账号密码登录代码-->
	</div>  
	  
	<div style="text-align: center;" v-if="activeName=='first'">  
		<!--扫码登录组件-->
		<qrcode></qrcode>  
	</div>  
</el-form>

<script>
import qrcode from "./qrcode.vue";  
export default {  
	name: "Login",  
	components:{  
		qrcode  
	},  
	data() {  
		return {  
			activeName:"first",
		}
	}
}
</script>
2、扫码登录页面
<template>  
	<div v-if="qr_status === 'NOT_SCAN' || qr_status === 'EXPIRED'" class="qr-img">  
	  
		<!--直接把后端返回的二维码的base64编码作为图片的src值即可显示二维码-->  
		<el-image v-if="qr_status === 'NOT_SCAN'" style="width: 200px; height: 200px" :src="qr_src" fit="cover">  
		<div slot="error" class="image-slot">  
			<i class="el-icon-picture-outline"></i>  
		</div>  
		
		<div slot="placeholder" class="image-slot">  
			加载中  
			<span class="dot">...</span>  
		</div>  
	</el-image>  
	
	<div v-else style="margin: 0 auto; width: 200px; height: 200px; font-size: 16px; color: #f3f3f3">  
		<div class="expired-title">二维码已失效</div>  
			<el-button type="primary" style="margin: 40px auto" @click="getQrCode">刷新二维码</el-button>  
		</div>  
		<div class="fresh">  
			<el-link @click="getQrCode" :underline="false" type="primary">  
				<i class="el-icon-refresh-right"></i> 刷新二维码  
			</el-link>  
		</div>  
		<div class="fresh">  
			打开小程序扫码登录  
		</div>  
	</div>  
	
	<div v-else-if="qr_status === 'SCANNED' || qr_status === 'VERIFIED'" class="scand">  
		<div class="scand-icon">  
			<i class="el-icon-success"></i>  
		</div>  
		<div class="scan-title">App已扫描成功!</div>  
		<div class="scan-h1">请在手机上根据提示确认</div>  
	</div>  
</template>  
  
<script>  
import {createQrcode,checkQR} from "@/api/qrcode.js";  
import { setToken } from '@/utils/auth'  
export default {  
	name: "Qrcode",  
	data() {  
		return {  
			qr_src:"",  
			qr_status:"NOT_SCAN"  
		};  
	},  
	created() {  
		this.getQrCode();  
	},  
	
	methods: {  
		//获取二维码  
		getQrCode() {  
			//清除之前设置的长轮询  
			clearInterval(this.Timer);  
			//设置二维码初始状态为未扫描  
			this.qr_status = "NOT_SCAN";  
			//清空二维码url  
			this.qr_src = "";  
			createQrcode().then((res) => {  
				var data = res.data;  
				this.qr_src = data.replace(/[\r\n]/g, "");  
				console.log(this.qr_src)  
				//二维码请求成功后开始长轮询查询二维码状态  
				this.checkQr();  
			}).catch((err) => {  
				console.log(err);  
			});  
		},  
	
		//轮询检查二维码是否过期或者是否被扫描  
		checkQr() {  
			var _this = this;  
			//开始长轮询  
			var timer = setInterval(() => {  
				var data = { img: this.qr_src };  
				//携带上当前二维码的base64编码  
				checkQR(data) .then((res) => {  
					console.log(res)  
					var data = res.data;  
					if (res.code === 200) {  
						//返回当前
PC端实现微信扫码登录的技术指南 通过按照上述步骤,你可以在PC端实现微信扫码登录功能。首先,注册并获取微信开放平台的AppID和AppSecret。然后,在HTML页面中引入微信扫码登录组件,并创建扫码登录按钮。最后,在回调URL的后端代码中处理回调并获取用户授权信息,以实现身份验证或其他相关操作。实现微信扫码登录可以提供更方便的登录体验,并为用户和网站管理员带来许多便利。希望本文对你有所帮助! 阅读详情

相关推荐

微信扫一扫登录(使用小程序实现)

个人网站是无法接入微信扫一扫登录的,只能使用曲线救国的方式,采用小程序了,小程序是可以获取到微信用户的 UnionID 的。 首先第一步要注册一个小程序应用,很简单的,用邮箱申请即可,点击注册 注册完成之后就可以进行开发了,我后台服务使用的是node来写的 生成小程序二维码 要做扫一扫登录,二维码是不可少的,官方也提供了几种生成二维码的方式。查看生成方式 我使用的是A接口,详细信息可查看官方文档。 POST https://api.weixin.qq.com/wxa/getwxacode?access_t

li5672的专栏 1万+

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

本文详细解析了基于微信小程序的PC后台扫码登录全流程。通过状态机与Redis缓存协同,实现PC端生成二维码、小程序扫描授权、后端生成Token并返回的完整闭环。该方案不仅提升了登录安全性与用户体验,还统一了多端用户体系,是现代化后台系统的高效登录选择。

raspberrypi5的博客 568

后台管理使用微信扫码登录(小程序登录)

【代码】后台管理使用微信扫码登录(小程序登录)

weixin_45730377的博客 1557

实现微信小程序扫码,在PC端登陆并且自动跳转页面

通过微信小程序扫码,在PC端登陆跳转相应页面 最近在做一个零食店,移动端采用微信小程序进行实现。当然,既然是零食店,那么肯定会有后台管理的,当时的想法是如何才能通过微信小程序里进行扫码去登陆PC端的管理平台呢?话不多说,接下来就说说我是怎么做到! 首先,大致上讲一下我的实现思路,整体通过WebSocket来实现自动跳转。在PC登陆页,展示二维码,建立WebSocket连接,当微信小程序扫码后,在后...

cfdxnl的博客 7334

基于微信小程序的PC端扫码登录实现方案

本文详细解析了基于微信小程序的PC端扫码登录实现方案。通过剖析“三次握手”核心逻辑,结合Spring Boot后端与Vue前端的实战代码,阐述了如何利用UUID状态驱动和Redis缓存,安全高效地完成从二维码生成、小程序扫描、用户确认到PC端登录的全流程,有效提升后台系统登录的安全性与便捷性。

weixin_29214335的博客 703

使用微信小程序扫码登录系统PC端web的功能

1、项目说明: 项目PC端(vue单页面应用,前后端分离)、移动端(微信小程序)共用同一Java Springboot服务。小程序可以直接获取微信手机号登录,不需要密码,因为系统黙认密码是随机的,因此在登录PC端时,用户就不知道密码是多少,实现PC端登录目前可以用三种方案: 1)因为可以直接登录微信小程序,所以可以在小程序中重置密码,这样就可以在PC端登录了,这比较简单。 2)使用微信开放平台第三方网站oauth2授权登录,这也是可以实现的,不过要申请微信网站应用,有点麻烦。 3)目前最快能实现的扫

zxstrive的专栏 4350

vue3 - 最新手机扫码PC网站二维码登录功能,用手机端扫描PC端vue3网页的登录二维码,然后在手机上点击“确认登录“完成登录,PC网页生成登录二维码,用户拿手机扫码,手机上点确定后电脑端做出响应

vue3,uniapp,微信小程序,vue3+uniapp实现移动端+pc端互通扫码登录,微信扫码登录,手机扫电脑微信登录码登录功能,vue3手机微信扫码登录详细教程,如何实现微信扫码授权登录,手机小程序怎么和网页pc扫二维码登录互通监听手机端确认登录,vue3手机+网页扫码登录,pc微信网页授权,网站接入微信扫码登录功能详细教程,手机小程序扫网页二维码登录的原理,vue3接入微信扫码授权登录流程,vue使用手机app扫描二维码登录,微信扫码登录后获取信息数据,vue生成二维码实现手机APP扫码进行web网

✅ 精选推荐文章 4999

ESP32-S3驱动PCA9685模块:I2C扩展16路舵机控制实战指南

本文提供了ESP32-S3通过I2C总线驱动PCA9685模块扩展16路PWM输出的完整实战指南。详细解析了PCA9685模块原理、硬件连接、I2C地址配置,并给出了核心驱动代码与角度控制函数,帮助开发者解决微控制器PWM引脚不足的问题,轻松实现多路舵机控制。

weixin_32005771的博客 519

从CMT2300A实战出发:Sub1G射频匹配电路设计要点与315MHz应用详解

本文从CMT2300A芯片实战出发,详细解析Sub1G射频匹配电路设计要点,特别针对315MHz应用场景。内容涵盖频段划分逻辑、调制方式选择、晶体振荡器设计等基础认知,以及315MHz匹配电路物料选型、巴伦网络处理等实战技巧,并分享PCB布局防干扰设计和实测验证方法,助力开发者优化射频通信性能。

weixin_29238147的博客 163

西门子TM PosInput1模块SSI编码器配置与速度测量实战

本文详细介绍了西门子TM PosInput1模块配置SSI绝对值编码器的实战步骤,涵盖硬件组态、工艺对象配置、编程实现与速度测量优化。重点解析了高分辨率编码器的数值处理技巧和常见调试问题,帮助工程师快速实现高精度位置与速度检测,提升自动化项目效率。

emacs5lisp的博客 340

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

免费 AIS船舶轨迹预测 数据集 分享 (可用于长周期轨迹预测)

论文中使用的数据由提供。有关预处理步骤的详细信息,请参阅。

qq_43747519的博客 1万+

【异常】Claude Code 第三方API 400报错(thinking type should be enabled or disabled)解决方案

摘要: Claude Code接入第三方API端点时出现400参数错误,主要因新版默认启用的Adaptive Thinking功能与旧版接口参数格式不兼容(需thinking: {type: "adaptive"},但第三方仅支持布尔值)。解决方案为修改本地settings.json配置文件,添加"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"环境变量并重启客户端,即可恢复思考模式功能。Adaptive Th

奶爸的编程之路,也就一周冷个三天 1万+

【DRAM存储器六十二】DDR5介绍--引脚和基本功能简介

详述DDR5与DDR4的引脚区别和DDR5基本功能

highman110的博客 524

Android系统开机时间分析与优化指南

本文系统阐述了Android开机时间优化的全流程技术方案。首先详细解析了从电源键按下到桌面显示的完整启动流程及关键事件序列,然后介绍了秒表计时、日志分析和自动化脚本三种测量方法。重点从底层和上层两个维度提出了具体优化措施:底层包括编译器优化、内核驱动裁剪和日志精简;上层涵盖系统服务参数调整、应用预优化和功能组件精简。最后提供了验证工具和方法,并强调优化需要在性能、功耗和功能间取得平衡。通过这套系统化方案,可有效提升Android设备的开机速度与用户体验。

学无止境 352

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 设置云效仓库参数到环境变量及gradle使用
下一篇: gradle7.6.1+springboot3.2.4+mybatis-plus搭建工程
cherishSpring
博客等级 码龄11年 134粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值