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://www.rhkb.cn/news/264750.html

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

相关文章

第3.5章:StarRocks数据导入——Broker Load

注:本篇文章阐述的是StarRocks-3.2版本的Broker Load导入机制 一、概述 Broker Load导入方式支持从HDFS类的外部存储系统(例如:HDFS、阿里OSS、腾讯COS、华为云OBS等),支持Parquet、ORC、CSV、及 JSON 四种文件格式&a…

c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题

最近做项目,要跟对方系统的库进行读写,结果发现对方采用的是oracle的us7ascii编码,我们系统默认采用的是ZHS16GBK,导致我们客户端读取和写入对方库的数据都是乱码,搜索网上,发现需要采用独立的oracle驱动去…

【GPTs分享】GPTs分享之Write For Me

Write For Me 是一个专门定制的GPT版本,旨在为用户提供高质量的文本内容创作服务。它适用于各种写作需求,从商业计划、学术文章到创意故事等。下面是从简介、主要功能、使用案例、优点和局限性几个方面对Write For Me 的详细介绍。 简介 Write For Me …

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢? …

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考:10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验,也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…

蜣螂优化算法DBO求解不闭合SD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

一、蜣螂优化算法(Dung beetle optimizer,DBO) 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得…

YOLOv9-Openvino和ONNXRuntime推理【CPU】

1 环境: CPU:i5-12500 Python:3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

开源大语言模型作为 LangChain 智能体

概要 开源大型语言模型 (LLMs) 现已达到一种性能水平,使它们适合作为推动智能体工作流的推理引擎: Mixtral 甚至在我们的基准测试中 超过了 GPT-3.5,并且通过微调,其性能可以轻易的得到进一步增强。 引言 针对 因果语言建模 训练的大型语言模…

使用 npm/yarn 等命令的时候会,为什么会发生 Error: certificate has expired

缘起 昨天,我写了一篇文章,介绍如何使用项目模板,构建一个 Electron 项目的脚手架,我发现我自己在本地无法运行成功,出现了错误。 ✖ Failed to install modules: ["electron-forge/plugin-vite^7.2.0",&qu…

golang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

C# 通过共享内存调用C++ 算法

需求: C#程序调用 C开发的dll. 一种C# 程序调用c 算法方案_算法怎么被c#调用-CSDN博客 上回书说到,将c算法封装为dll 插件,c加载后,暴露C风格接口,然后供C#调用。但是这样有几个问题: 1,一是…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量: Mean: 高斯分布中的μ值(平均值) Sensit: sensitivity,也就是1个Sigma的值; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson 16 At the Shoe Store 在鞋店

《美语从头学初级入门篇》 注意:被 删除线 划掉的不一定不正确,只是不是标准答案。 文章目录 Lesson 16 At the Shoe Store 在鞋店对话A对话B笔记会话A会话B替换 Lesson 16 At the Shoe Store 在鞋店 对话A A: Do you have these shoes in size 8? B:…

备战蓝桥杯---树形DP基础1

我们先来看几个比较简单的例子来引入: 我们令f[i]表示以i为根节点的子树大小,易得状态转移方程为: f[i]1f[son1]....f[soni]; 我们用DFS即可,下面是大致的模板: 让我们来看看几道题吧: 1.贪心树形DPDFS&…

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 灰狼优化算法: 卷积神经网络-长短期记忆网络: 四、完整程序下载: 一、程序及算法内容…

【教程】 iOS混淆加固原理篇

目录 摘要 引言 正文 1. 加固的缘由 2. 编译过程 3. 加固类型 1) 字符串混淆 2) 类名、方法名混淆 3) 程序结构混淆加密 4) 反调试、反注入等一些主动保护策略 4. 逆向工具 5. OLLVM 6. IPA guard 7. 代码虚拟化 总结 摘要 本文介绍了iOS应用程序混淆加固的缘由…

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版,以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

https://htmlunit.sourceforge.io/

https://htmlunit.sourceforge.io/ 爬虫 HtmlUnit – Welcome to HtmlUnit HtmlUnit 3.11.0 API https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.70.0 https://s01.oss.sonatype.org/service/local/repositories/releases/content/org/htmlunit…

STM32--低功耗模式详解

一、PWR简介 正常模式与睡眠模式耗电是mA级,停机模式与待机模式是uA级。 二、电源框图 供电区域有三处,分别是模拟部分供电(VDDA),数字部分供电,包括VDD供电区域和1.8V供电区域,后备供电&…

StarRocks之监控管理(内含DashBoard模板)

先看下最终效果图 架构 Prometheus 是一个拥有多维度数据模型的、灵活的查询语句的时序数据库。它可以通过 Pull 或 Push 采集被监控系统的监控项,存入自身的时序数据库中。并且通过丰富的多维数据查询语言,满足用户的不同需求。 Grafana 是一个开源的 Metric 分析及可视化系…