springboot+vue实现微信公众号扫码登录

通常在个人网站中,都会有各种第三方登录,其中微信登录需要认证才能使用,导致个人开发者不能进行使用此功能,但是我们可以使用微信公众号回复特定验证码来进行登录操作。

微信关键词处理

微信公众号关键词自动回复,具体的处理方式可以查看这篇文章

1.微信公众号关键词处理中加登录逻辑


/*** 微信接口相关控制器* Created by PeakGao on 2023/8/5.*/@RestController
@RequestMapping("/wechat")
@RequiredArgsConstructor
public class ApiWeChatController extends BaseController {@Resourceprivate ThirdService thirdService;private final WxMpService wxMpService;private final Pattern pattern = Pattern.compile("(?i)^PG\\d{4}$");/*** 关键字回复 + 登录逻辑** @param request* @return*/@PostMapping(produces = "application/xml; charset=UTF-8")public String handleMsg(HttpServletRequest request) {try {WxMpXmlMessage message = WxMpXmlMessage.fromXml(request.getInputStream());String content = message.getContent();logger.info("公众号请求类型:{};内容为:{}", message.getMsgType(), content);if (WxConsts.XmlMsgType.TEXT.equals(message.getMsgType())) {if ("验证码".equals(content)) {String code = RandomUtils.generationNumberChar(6);String msg = MessageFormat.format("您的本次验证码:{0},该验证码30分钟内有效。", code);redisUtil.set(Constant.WECHAT_CODE + code, code, 1800);return returnMsg(msg, message);}//登录逻辑Matcher matcher = pattern.matcher(content);if (!matcher.matches()) {return returnMsg("验证不正确或已过期", message);} else {//TODO 自己的登录逻辑//String msg = thirdService.wechatLogin(message);return returnMsg(msg, message);}}} catch (Exception e) {e.printStackTrace();}return "";}/*** 返回消息** @param msg     消息内容* @param message* @return*/private static String returnMsg(String msg, WxMpXmlMessage message) {WxMpXmlOutTextMessage outMessage = WxMpXmlOutTextMessage.TEXT().content(msg).fromUser(message.getToUser()).toUser(message.getFromUser()).build();return outMessage.toXml();}}

2、wechatLogin判断用户是否微信登录成功(这里只是看验证码过期没)

   public String wechatLogin(WxMpXmlMessage message) {String content = message.getContent().toUpperCase();logger.info("微信扫码公众号登录验证码:{}", content);if (content.length() != 6) {return "验证码错误";}//先判断登录码是否已过期boolean loginFlag = redisUtil.hasKey(Constant.REDIS_KEY_PREFIX + Constant.WX_LOGIN_USER_STATUE + content);if (!loginFlag) {return "验证码已过期";}//TODO  doSoming//根据getFromUser查询用户是否已存在,fromUser就是微信的openidUserInfoVO userInfoVO = userMapper.selectByUserName(message.getFromUser());//新用户  写自己的逻辑if (userInfoVO == null) {}else{}//修改redis缓存 以便监听是否已经授权成功redisService.setCacheObject(RedisConstants.WX_LOGIN_USER + content, userInfoVO, 60, TimeUnit.SECONDS);return "网站登录成功!(若页面长时间未跳转请刷新验证码)";}

3、添加获取验证码方法

public R getWechatLoginCode() {String code = "PG" + RandomUtils.generationNumberChar(4);redisUtil.set(Constant.REDIS_KEY_PREFIX + Constant.WX_LOGIN_USER_STATUE + code, false, 60);return R.ok(code);
}

4、添加wxIsLogin方法

新增wxIsLogin方法用来监听是否已经回复验证码登录,其中logincode就是前端获取的登录验证码

public R wxIsLogin(String loginCode) {Object user = redisUtil.get(Constant.REDIS_KEY_PREFIX + Constant.WX_LOGIN_USER_STATUE + loginCode);if (user == null) {return R.error("用户未被授权");}//TODO 登录成功 这里生成token返回return R.ok(token);}

5、调用wxIsLogin

前端定时调用wxIsLogin方法来判断是否已经登录成功。这里需要注意的是先调用方法获取登录验证码后同时开始定时任务调用wxIsLogin
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存

MQ功能实现的具体代码(TsMQ.ts): import { v4 as uuidx } from uuid;import emitter from /utils/mitt// 消息类 class Message {// 过期时间,0表示马上就消费exp: number;// 消费标识,避免重复消费tag : string;// 消息体body : any;constr…

数据结构与算法|线性结构

数据结构与算法|线性结构 第二章 线性结构2.1 多项式表示2.2 什么是线性表2.3 线性表的实现方式2.3.1 线性表的顺序存储实现2.3.2 线性表的链式存储实现1. 单链表实现2. 双链表实现 上篇:第一章、绪论 第二章 线性结构 线性结构是数据结构中最基础的,也…

如何操作系统缓冲区减少了磁盘碎片化?

如何操作系统缓冲区减少了磁盘碎片化? 在探讨操作系统如何通过使用缓冲区来减少磁盘碎片化之前,我们需要先了解什么是磁盘碎片化以及它为什么会对我们的电脑性能造成影响。 磁盘碎片化简介 磁盘碎片化发生在计算机硬盘上存储数据的过程中。简单来说&am…

2024年记住我功能该如何实现

在传统的前后端不分离项目中,大家在登录界面应该经常能看到记住我这个功能,这个功能本质上是为了让用户能在一段较长时间内不在重复登录,在以前的实现方案中,大家多使用 cookie 实现,本文给大家介绍在引入了 spring-se…

Spring_Boot_3新特性或者说新功能

文章目录 一、Spring_Boot_31、基本变化2、Spring Framework 63、部分第三方jar将更新到最新稳定版4、部分依赖从Java EE改为Jakarta EE 二、变化2.1、spring.factories文件废弃2.2、Spring Native (GraalVM )2.3、jakarta代替javax2.4、改进的Construct…

c#---简易人民币美元兑换程序

这学期开始学习c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace renminbimeiyuan …

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在编写 socket 网络编程时,会用到字节流的转换函数、例如 inet_pton、htons 等,那么为什么要用到这些函数呢,本篇主要就是对这部分进行介绍。 核心知识 重点需要记…

“智能语音指令解析“ 基于NLP与语音识别的工单关键信息提取

“智能语音指令解析“ 基于NLP与语音识别的工单关键信息提取 1. 背景介绍1.1 场景痛点1.2 方案选型 2. 准备开发环境3. PaddleSpeech 语音识别快速使用4. PaddleNLP 信息抽取快速使用5. 语音工单信息抽取核心功能实现6. 语音工单信息抽取网页应用6.1 网页前端6.2 网页后端6.3 a…

一个基于轮询的广告系统

无论PC 客户端还是手机客户端,可能会遇到需要发布一些广告,这些广告可能是自己开发的,可能是三方的,而且希望是比较通用,能随时发布,随时就能看到效果。 本文提供了一种基于轮询的广告系统,主要…

springboot-基础-thymeleaf配置+YAML语法

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 目录 配置thymeleafthymeleaf举例参数设置yaml基础知识YAML语法报错:Expecting a Mapping node but got 其他语法 spring boot不推荐使用jsp。thymeleaf是一个XML/XHTML/HTM…

Spring Bean 相关注解

目录 Autowired Component,Repository,Service, Controller RestController Scope Configuration Autowired 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。 Service public class UserService …

prime_series_level-1靶场详解

环境搭建 官网https://www.vulnhub.com/entry/prime-1,358/ 直接导入靶机 解题思路 arp-scan -l 确认靶机ip为192.168.236.136 也可以使用nmap扫网段 nmap -sn 192.168.236.0/24 使用nmap扫描靶机开放的端口 nmap -sS -T5 --min-rate 10000 192.168.236.136 -sC -p- &#xf…

K8S(kubernetes) 部署运用方式汇总

k8s 部署运用这边汇总两类,第一种是命令版本。第二种是文本版本,通过创建yaml文件方式。 此次目标:通过k8s创建nginx,端口80并且可以被外网访问。 kubectl get namespaces 一、创建命名空间 首先创建一个命名空间,有了命名空间后…

DAY35--learning English

一、积累 1.retreat 2.assign 3.concentrate 4.puppet 5.paste 6.cripple 7.prone 8.scatter 9.conceal 10.cabinet 11.cultery 12.consecutive 13.pat 14.suppress 15.stump 16.lava 17.jail 18.collaboration 19.negotiate 20.hoof 二、练习 1.牛津原译 retreat /rɪˈtri…

H12-821_81

81.如图所示的拓扑以及交换机互联端口上的配置,可以判断标签为VLAN10的数据帧可以在两台交换机之间正常转发。 A.正确 B.错误 答案:B 注释: LSW2的G0/0/1接口允许发送VLAN10的数据帧,但是发送出去的时候会剥离VLAN标记&#xff0…

SD NAND技术在穿戴医疗领域的创新应用

SD NAND和穿戴医疗 近年来,随着科技的不断发展,穿戴医疗设备在监测和维护个体健康方面发挥着越来越重要的作用。其中,SD NAND技术的应用为这一领域带来了全新的可能性。本文将探讨SD NAND在穿戴医疗上的创新应用,从数据存储、固件…

【virtual Box】功能速通:安装 Windows 和 Ubuntu

文章目录 一、虚拟机1.1 概述1.2 virtual box概述 二、新建虚拟机、删除、注册三、虚拟机内部设置3.1 安装增强功能驱动3.2 分辨率问题3.3 网络链接方式 一、虚拟机 1.1 概述 虚拟机(Virtual Machine,VM)是一种软件实现的计算机系统&#x…

【Unity自制手册】Unity—Camera相机跟随的方法大全

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【自然语言处理三-自注意self attention】

自然语言处理三-自注意力 self attention 自注意力是什么?自注意力模型出现的原因是什么?词性标注问题解决方法1-扩展window,引用上下文解决方法2-运用seq2seq架构新问题来了:参数量增加、无法并行的顽疾 自注意力self attention模…

【QT+QGIS跨平台编译】之五十一:【QGIS_CORE跨平台编译】—【qgsexpressionparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…