技术社区项目—利用SSE协议实现技术社区公众号扫码登录

news2024/12/26 9:19:14

前言

在技术社区项目中,用户登录是一个至关重要的环节,而传统的用户名密码登录方式已经无法满足用户对于便捷、安全的需求。为了提升用户体验,我们开发小组采用了一种基于SSE(Server-Sent Events,服务器发送事件)协议的登录方式,通过微信公众号扫码登录的方式,实现了快捷、实时的登录体验。

背景

在传统的网站登录方式中,用户需要输入用户名和密码,然后点击登录按钮进行验证。这种方式存在着一些问题,例如容易忘记密码、登录流程繁琐等。因此,我们希望能够提供一种更加便捷的登录方式,同时保证安全性。

SSE协议

SSE(Server-Sent Events,服务器发送事件)是一种基于HTTP协议的服务器推送技术,用于实现服务器向客户端单向发送实时事件的机制。它允许服务器在任何时候向客户端发送数据,而客户端无需显式地发起请求。

SSE协议的特点包括:

  1. 基于HTTP:SSE基于HTTP协议,利用了HTTP的长连接机制(Keep-Alive),使得服务器可以持续向客户端发送数据。

  2. 单向通信:SSE是一种单向通信协议,只允许服务器向客户端发送数据,而客户端不能向服务器发送数据。

  3. 实时性:SSE能够实现实时的事件推送,当服务器有新的数据时,立即向客户端发送。

  4. 文本数据:SSE传输的数据格式通常是文本(例如JSON格式),不支持传输二进制数据。

SSE协议的使用场景包括:

  • 实时通知和提醒:例如在线聊天应用中,服务器可以使用SSE向客户端推送新消息的通知。
  • 实时数据更新:例如股票行情、实时监控系统等,服务器可以使用SSE向客户端推送最新的数据更新。
  • 实时事件处理:例如在线游戏中,服务器可以使用SSE向客户端推送游戏事件的通知。

在使用SSE时,客户端通过创建一个EventSource对象来与服务器建立连接,并监听服务器发送的事件。一旦建立连接后,服务器可以随时向客户端发送事件,客户端会通过监听事件的方式接收并处理这些事件。

总的来说,SSE是一种简单而有效的服务器推送技术,适用于需要实现服务器向客户端实时推送数据的场景。

方案设计

我们设计了一种基于微信公众号扫码登录的方案。具体流程如下:

  1. 用户点击登录按钮后,前端会向后端请求获取登录的二维码。

  2. 后端收到请求后,生成一个唯一的登录标识(uuid),并返回给前端。同时,后端会建立一个与前端的半长连接,用于后续的自动登录跳转。

  3. 前端将生成的二维码展示给用户,用户使用微信扫码后,微信会自动向后端发送一个登录验证请求,并将用户的微信信息传递给后端。

  4. 后端收到微信的验证请求后,根据用户的微信信息进行验证,并生成登录凭证。

  5. 后端将登录凭证通过半长连接发送给前端,前端收到登录凭证后,自动跳转到登录成功页面。

在这里插入图片描述

实现细节

在实现过程中,我们加入了一层设备ID的验证机制,并使用了两个缓存:deviceCodeCache和verifyCodeCache。

  • deviceCodeCache:缓存设备ID与验证码之间的映射关系,确保同一个设备多次访问验证码都是相同的,避免频繁刷新页面导致不断的往 verifyCodecache 中塞入新的kv对。

  • verifyCodeCache:缓存验证码与半长连接之间的映射关系,确保在五分钟内,不管刷新多少次,验证码都保持一致。

通过这样的设计,我们既保证了验证码的安全性和有效性,又提升了用户体验。

历史原因导致的接口拆分

在开发中,我们采用了两个接口来实现登录流程的拆分。这是由于最初的微信公众号登录方案较为繁琐,用户需要在公众号中输入关键字获取验证码,然后在登录页面输入验证码进行登录。为了简化操作流程,我们改进了登录方式,但在实现上保留了原有的接口设计。这种历史原因导致了接口的拆分,虽然在实践中可能不是最优的设计,但在项目迭代过程中我觉得却是合理且必要的。

小结

通过基于SSE协议的扫码登录方式,我们实现了用户登录流程的简化和加速。用户无需输入密码,只需使用微信扫码即可完成登录,极大地提升了用户体验。同时,加入设备ID验证机制和双重缓存策略,进一步确保了系统的安全性和稳定性。

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

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

相关文章

常用显示屏学习——LCD12864(含高级驱动程序)

LCD12864液晶显示屏 屏幕介绍 ① 可显示四行字符,每行可显示8个汉字或者16个数字和字母; ②可串行通信和并行通信; ③ 串口接口管脚信号 通信方法 (一)八位并行通信方法 (二)串行通信方法 用…

Spring Session:入门案例

Spring Session provides an API and implementations for managing a user’s session information. Spring Session提供了一种用于管理用户session信息管理的API。 Spring Session特点 传统的Servlet应用中,Session是存储在服务端的,即:Ses…

RapidJson开源库使用

1.下载 GitHub - Tencent/rapidjson: A fast JSON parser/generator for C with both SAX/DOM style APIA fast JSON parser/generator for C with both SAX/DOM style API - Tencent/rapidjsonhttps://github.com/Tencent/rapidjson 官方使用手册:RapidJSON: 首页…

码上飞:免费制作自己的ChatBot

今天为大家介绍一款可以免费制作ChatBot的软件开发平台,码上飞CodeFlying,只需几步,即可完成ChatBot的开发,并且支持自定义添加自己的知识库! 第一步:访问官网:码上飞 CodeFlying | AI 智能软件…

SpringMVC 学习(一)之 SpringMVC 介绍

目录 1 MVC 介绍 2 SpringMVC 介绍 2.1 SpringMVC 特点 2.2 SpringMVC 的核心组件 2.3 SpringMVC 执行流程 3 参考文档 1 MVC 介绍 MVC (Model View Controller) 是一种设计思想,它将应用程序分为三大组件:模型 (Model)、视图 (View)、控制器 (Con…

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了,只说下,启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码,无法登陆 然后点忘记密码,由于是docker安装的,根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…

go使用trpc案例

1.go下载trpc go install trpc.group/trpc-go/trpc-cmdline/trpclatest 有报错的话尝试配置一些代理(选一个) go env -w GOPROXYhttps://goproxy.cn,direct go env -w GOPROXYhttps://goproxy.io,direct go env -w GOPROXYhttps://goproxy.baidu.com/…

[面试] 如何保证Redis和MySQL数据一致性?

为什么要在Redis存数据 Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据 库 IO,还可以提升数据的 IO 性能。 因为Redis基于内存, 查询效率比MySQL快很多, 所以有限查询Redis中的数据,如果Redis没有就查询数据库然后同步到Redis 出…

算法-两两交换链表中的节点

1、题目来源 24. 两两交换链表中的节点 - 力扣(LeetCode) 2、题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交…

【C++】内存分配 | 内存管理 | new和delete | 内存泄漏

目录 1. C/C内存分布 2. C语言中动态内存管理方式 3. C内存管理方式 3.1 new操作内置类型 3.2 new自定义类型 4. operator new函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定义类型 6. 定位new表达式 7. 常见面试题 7.1 malloc/free和new/delete的区别 7.2…

【C++STL】STL容器详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

JVM(1)

JVM简介 JVM是Java Virtual Machine的简称,意为Java虚拟机. 在java中,它归属于jre(java运行时环境), 而jre归属于jdk(java开发工具包). 虚拟机是指通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统. 常见的虚拟机:JVM, VMwave, VirtualBox. J…

什么是SSD型云服务器?

​  SSD云服务器是一种使用固态硬盘代替传统HDD进行存储的虚拟机。SDD 使用闪存单元来存储数据&#xff0c;与云计算技术相结合&#xff0c;形成强大且高效的存储解决方案&#xff0c;可以随时随地访问。 SSD云服务器如何工作? SSD云服务器是利用虚拟化和云计算技术创建的。…

抖音数据抓取工具|视频内容提取软件

引言部分&#xff1a; 介绍针对抖音视频下载需求开发的强大工具突出解决用户获取抖音视频繁琐问题的初衷 工具功能介绍&#xff1a; 详细描述工具功能&#xff0c;包括关键词搜索、自动批量抓取、选择性批量下载等提及基于C#开发的优势以及支持通过分享链接进行单个视频抓取…

eureka 简介和基本使用

Eureka 是Netflix开发的服务发现框架&#xff0c;是Spring Cloud微服务架构中的一部分。它主要用于微服务架构中的服务注册与发现。Eureka由两部分组成&#xff1a;Eureka Server 和 Eureka Client。获取更详细的信息可以访问官网&#xff0c;如下图&#xff1a; Eureka Server…

使用uniapp实现小程序获取wifi并连接

一、背景 因业务需求&#xff0c;需要在小程序实现发现wifi和连接wifi。但由于Andriod和IOS有差异&#xff0c;所以实现起来有所区别。 先看官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/device/wifi.html 把连接基础流程了解后&#xff0c;发现二者…

EasyRecovery2024高级完整个人版免费下载使用

该软件的高级功能和功能选项主要包括以下几个方面&#xff1a; 恢复删除的磁盘分区&#xff1a;EasyRecovery能够快速扫描磁盘&#xff0c;寻找并恢复删除的磁盘分区&#xff0c;无需检索完整磁盘扇区。支持主流的MBR和GPT分区类型&#xff0c;实现安全可靠的分区恢复。恢复格…

pythonJax小记(五):python: 使用Jax深度图像(正交投影和透视投影之间的转换)(持续更新,评论区可以补充)

python: 使用Jax深度图像&#xff08;正交投影和透视投影之间的转换&#xff09; 前言问题描述1. 透视投影2. 正交投影 直接上代码解释1. compute_projection_parameters 函数a. 参数解释b. 函数计算 2. ortho_to_persp 函数a. 计算投影参数&#xff1a;b. 生成像素坐标网格&am…

《Python 语音转换简易速速上手小册》第10章 未来趋势和发展方向(2024 最新版)

文章目录 10.1 语音技术的未来展望10.1.1 基础知识10.1.2 主要案例:语音驱动的虚拟助理案例介绍案例 Demo案例分析10.1.3 扩展案例 1:情感敏感的客服机器人案例介绍案例 Demo案例分析10.1.4 扩展案例 2:多模态智能会议系统案例介绍案例 Demo

Linux-用户和权限(黑马学习笔记)

认识root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 ● 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; ● 而在前期&#xff0c;我们一直…