当前位置: 首页 > news >正文

【功能大全】手机短信验证码一键注册登录流程

目录

发送验证码

注册登录

用户表设计

​编辑申请腾讯云短信与密钥

找到云短信服务

开通腾讯云短信服务

​编辑​​​​​创建短信签名

​编辑​编辑创建短信正文模版​编辑​编辑

等待审核

测试短信​编辑

SDK密钥创建

SpringBoot集成腾讯云短信

pom中导入腾讯云短信的sdk坐标:

resource创建资源文件,放入腾讯云短信的信息

构建资源类,和秘钥信息做好映射,方便后续获得

发送短信源码(可在腾讯云官网查询源码)

在controller中测试发送


发送验证码


1.点击按钮(获得验证码)
2.设置:60秒内只能获得一次验证码
3.设置:验证码有效时间(5分钟/15分钟/30分钟)
4.发送验证码到手机

注册登录

1.点击按钮 注册登录
2.判断验证码有效
3.查询判断用户是否存在
    a.不存在,则注册
    b. 存在,则登录
4.删除已使用的短信验证码
5.创建用户令牌并且协同用户信息返回给前端

用户表设计


申请腾讯云短信与密钥

找到云短信服务

  • 注册腾讯云
  • 个人实名认证
  • 进入到控制台,找到短信(或搜索即可或云产品中找到短信)

开通腾讯云短信服务

开通云短信服务,开通短信服务后才能发短信。


​​​​​创建短信签名



创建短信正文模版

等待审核

由于目前腾讯云短信只支持他用(公司),自用还在跟运营商沟通,如果后期运营商还不给予通过,腾讯云会修改该功能

测试短信

SDK密钥创建

在云产品找到访问秘钥



新建秘钥

SpringBoot集成腾讯云短信

pom中导入腾讯云短信的sdk坐标:

<!-- 第三方云厂商相关依赖 --><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. --><!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 --><version>3.1.598</version></dependency

resource创建资源文件,放入腾讯云短信的信息

构建资源类,和秘钥信息做好映射,方便后续获得

@Component
@Data
@PropertySource("classpath:tencentCloud.properties")
@ConfigurationProperties(prefix = "tencent.cloud")
public class TencentCloudProperties {private String SecretId;private String SecretKey;}

发送短信源码(可在腾讯云官网查询源码)


修改后的发送短信源码

@Component
public class SMSUtils {@Autowiredprivate TencentCloudProperties tencentCloudProperties;public void sendSMS(String phone, String code) throws Exception {try {/* 必要步骤:* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,* 以免泄露密钥对危及你的财产安全。* CAM密匙查询获取: https://console.cloud.tencent.com/cam/capi*/Credential cred = new Credential(tencentCloudProperties.getSecretId(),tencentCloudProperties.getSecretKey());// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();//            httpProfile.setReqMethod("POST"); // 默认使用POST/* SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务* 则必须手动指定域名,例如sms的上海金融区域名: sms.ap-shanghai-fsi.tencentcloudapi.com */httpProfile.setEndpoint("sms.tencentcloudapi.com");// 实例化一个client选项ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象SendSmsRequest req = new SendSmsRequest();String[] phoneNumberSet1 = {"+86" + phone};//电话号码req.setPhoneNumberSet(phoneNumberSet1);req.setSmsSdkAppId("1400568450");   // 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppIdreq.setSignName("火热男");         // 签名(创建签名中的签名内容)req.setTemplateId("1108902");       // 模板id:必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看/* 模板参数(自定义占位变量): 若无模板参数,则设置为空 */String[] templateParamSet1 = {code};req.setTemplateParamSet(templateParamSet1);// 返回的resp是一个SendSmsResponse的实例,与请求对象对应SendSmsResponse resp = client.SendSms(req);// 输出json格式的字符串回包
//            System.out.println(SendSmsResponse.toJsonString(resp));} catch (TencentCloudSDKException e) {System.out.println(e.toString());}}//    public static void main(String[] args) {
//        try {
//            new SMSUtils().sendSMS("18812345612", "7896");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}

在controller中测试发送

@Autowiredprivate SMSUtils smsUtils;@GetMapping("sms")public Object sms() throws Exception {smsUtils.sendSMS(MyInfo.getMobile(), "9875");return "Send SMS OK~~~";}

相关文章:

【功能大全】手机短信验证码一键注册登录流程

目录 发送验证码 注册登录 用户表设计 ​编辑申请腾讯云短信与密钥 找到云短信服务 开通腾讯云短信服务 ​编辑​​​​​创建短信签名 ​编辑​编辑创建短信正文模版​编辑​编辑 等待审核 测试短信​编辑 SDK密钥创建 SpringBoot集成腾讯云短信 pom中导入腾讯云短…...

【Python】【Matplotlib】深入解析plt.grid()---原理、应用与注意事项

【Python】【Matplotlib】深入解析plt.grid()—原理、应用、源码与注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f4…...

数据库规范化设计案例解析

1.介绍 数据库规范化设计是数据库设计的一种重要方法&#xff0c;旨在减少数据库中的冗余数据&#xff0c;提高数据的一致性&#xff0c;确保数据依赖合理&#xff0c;从而提高数据库的结构清晰度和维护效率。规范化设计通过应用一系列的规范化规则&#xff08;或称“范式”&a…...

服务器段的连接端口和监听端口编程实现

new ServerSocket(int)是开启监听端口&#xff0c;并不是连接端口。真正的连接端口是随机开辟的空闲端口&#xff0c;当连接创建完成后&#xff0c;监听关口可以继续等待下一次连接请求&#xff0c;处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态&#xff0c…...

用“定时执行专家”武装你的电脑,做时间管理大师!

简介 你是否厌倦了重复繁琐的电脑操作&#xff1f;你是否希望能够解放双手&#xff0c;提高工作效率&#xff1f;“定时执行专家”是一款功能强大的定时任务执行软件&#xff0c;可以帮你轻松实现自动化办公&#xff0c;让你成为时间管理大师&#xff01; 软件功能 支持25种任…...

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码...

计算器系统基础知识-校验码

1.奇偶校验码 通过在编码中增加一位奇数校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验)&#xff0c;从而使码距变为2。   常见的奇偶校验码有三种&#xff1a;水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。   以下是奇偶校验码的示例&#xff1a; public …...

springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法

sringboot原本使用的是logback日志框架&#xff0c;将它去掉&#xff0c;修改为log4j2日志框架后&#xff0c;往往会出现以下错误&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos…...

k8s+zabbix

一&#xff0c;环境&#xff1a; 1&#xff09;&#xff0c;k8s部署&#xff0c;master和node节点都部署成功 二&#xff0c;部署&#xff1a; 1&#xff09;&#xff0c;安装python3&#xff08;资源中有&#xff09; wget https://www.python.org/ftp/python/3.7.4/Python-…...

k8s-生产级的k8s高可用(2) 25

部署containerd k8s2、k8s3、k8s4在配置前需要重置节点&#xff08;reset&#xff09;在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker&#xff0c;因此containerd默认已安装 修改配置 启动containe…...

ubuntu20.04 创建ros环境、创建rospackage

roswiki教程&#xff1a;https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros&#xff0c;安装步骤参考&#xff1a;https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws &#xff0…...

QT进阶---------pro项目文件中的常用命令 (第三天)

1、命令一 决定exe可执行程序的生成路径CONFIG 作用&#xff1a;不使用默认路径&#xff0c;方便移植 CONFIG(debug, debug|release) {DESTDIR $$_PRO_FILE_PWD_/../../../debugXXXsystem } else {DESTDIR $$_PRO_FILE_PWD_/../../../realeaseXXXsystem } 是用于 Qt 项目…...

php常用设计模式应用场景及示例

单例模式 含义描述 应用程序中最多只有该类的一个实例存在 应用场景 常应用于数据库类设计&#xff0c;采用单例模式&#xff0c;只连接一次数据库&#xff0c;防止打开多个数据库连接。 代码示例 class Singleton {private static $instance; // 定义一个私有的静态变量保存…...

浏览器与服务器通信过程(HTTP协议)

目录 1 概念 2 常见的 web 服务器有 3 浏览器与服务器通信过程 3.1 DNS 3.2 URL 4 HTTP请求方法和应答状态码 4.1 HTTP请求报文段实例 4.2 HTTP请求方法 5 HTTP应答报头和应答状态 5.1 HTTP的应答报头结构 5.2 HTTP的应答状态 1 概念 浏览器与 web 服务器在应用层通…...

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…...

笔记:使用parfile进行的数据导入导出

expdp ‘username/password’ parfileE:\dmp_tmp\par.txt DIRECTORYdmptmp LOGFILESYS_SEND_LOG.log DUMPFILESYS_SEND_LOG.dmp tablesSYS_SEND_LOG_BAK query“where send_dt>TO_DATE(‘2024-03-13’,‘yyyy-mm-dd’)” impdp ‘username/password’ directorydmptmp dum…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人跌倒检测系统(深度学习+UI界面+完整训练数据集)

摘要&#xff1a;开发行人跌倒检测系统在确保老年人安全方面扮演着至关重要的角色。本篇文章详尽地阐述了如何利用深度学习技术构建一个行人跌倒检测系统&#xff0c;并附上了完整的代码实现。该系统采用了先进的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6、YOLOv5等先前版本进…...

Ubuntu 14.04:PaddleOCR基于PaddleServing的在线服务化部署(失败)

一、 二、安装 注&#xff1a; 安装 PaddleOCR 2.3 。 因为 PaddleOCR 2.4 的 推荐环境 PaddlePaddle > 2.1.2。 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/doc/doc_ch/environment.md 安装前的环境准备 在使用Paddle Serving之前&#xff0c;需要完…...

Java JUC 笔记(2)

Java JUC 笔记&#xff08;2&#xff09; 锁框架 JDK5以后增加了Lock接口用来实现锁功能&#xff0c;其提供了与synchronized类似的同步功能&#xff0c;但是在使用时手动的获取和释放锁 Lock和Condition锁 这里的锁与synchronized锁不太一样&#xff0c;我们可以认为是Loc…...

webpack5高级--02_提升打包构建速度

提升打包构建速度 一、HotModuleReplacement 为什么 开发时我们修改了其中一个模块代码&#xff0c;Webpack 默认会将所有模块全部重新打包编译&#xff0c;速度很慢。 所以我们需要做到修改某个模块代码&#xff0c;就只有这个模块代码需要重新打包编译&#xff0c;其他模…...

Laravel 11重磅更新:10大核心特性解析

Laravel 11.x&#xff08;2024年3月发布&#xff09;引入了多项重要更新&#xff0c;主要特性如下&#xff1a; 1. 精简项目结构 默认移除了 app/Http/Kernel.php 和 app/Console/Kernel.php&#xff0c;中间件配置迁移至 bootstrap/app.php&#xff1a; ->withMiddleware(…...

效率革命:用快马平台统一管理python项目,告别重复环境配置

效率革命&#xff1a;用快马平台统一管理python项目&#xff0c;告别重复环境配置 作为一名长期使用PyCharm进行Python开发的程序员&#xff0c;我经常遇到一个令人头疼的问题&#xff1a;每次新建数据分析项目&#xff0c;都要重复配置Python环境、安装依赖包、设置虚拟环境。…...

C++27原子智能降级策略(Auto-Degrade Atomic Pattern):当缓存行竞争超阈值时自动切换为lock-free队列——工业级源码级实现

第一章&#xff1a;C27原子智能降级策略的演进动因与设计哲学C27将首次引入原子智能降级&#xff08;Atomic Intelligent Fallback&#xff09;机制&#xff0c;其核心动因源于现代异构计算环境中硬件原子指令集碎片化加剧、内存模型语义边界模糊化&#xff0c;以及开发者在可移…...

Heltec ESP32 LoRaWAN协议栈深度解析与低功耗开发指南

1. 项目概述 ESP32_LoRaWAN 是 Heltec Automation 针对其 ESP32 LoRa 硬件平台深度定制的 LoRaWAN 协议栈实现&#xff0c;专为低功耗广域物联网&#xff08;LPWAN&#xff09;终端节点设计。该库并非通用型 LoRaWAN 封装&#xff0c;而是与 Heltec 自研硬件&#xff08;如 W…...

别让Liquid Glass拖慢你的App!给uni-app开发者的iOS 26动画优化清单(含代码示例)

别让Liquid Glass拖慢你的App&#xff01;给uni-app开发者的iOS 26动画优化清单&#xff08;含代码示例&#xff09; 最近在开发者社区里&#xff0c;不少同行都在吐槽iOS 26的动画性能问题。特别是那些采用了新Liquid Glass设计的应用&#xff0c;在旧款iPhone上运行时&#x…...

【Docker】镜像安全扫描工具clair与clairctl

【Docker】镜像安全扫描工具clair与clairctl 镜像扫描结构图 方式2的具体操作步骤 clair是什么&#xff1f; clair是一个开源项目&#xff0c;用于静态分析appc和docker容器中的漏洞。 漏洞元数据从一组已知的源连续导入&#xff0c;并与容器映像的索引内容相关联&#xff0c…...

CloudSat数据下载卡壳?手把手教你用SFTP+MATLAB搞定2B-CWC云水数据

CloudSat数据下载难题破解&#xff1a;SFTPMATLAB全流程实战指南 引言 CloudSat卫星作为NASA"地球系统科学探路者"计划的重要组成部分&#xff0c;其搭载的云廓线雷达(CPR)能够提供全球范围内垂直云结构的精确测量。对于研究云微物理特性、气候变化建模以及大气辐射平…...

Coze开发自能体的费用

Coze&#xff08;扣子&#xff09;的计费体系在 2026 年进行了全面升级&#xff0c;目前主要分为 国内版 (coze.cn) 和 国际版 (coze.com) 两套独立的定价逻辑。以下是具体的费用构成&#xff1a;1. 国内版 (coze.cn) 计费模式国内版目前采用的是订阅制 资源包的模式&#xff…...

CVPR/ICCV跟踪新趋势解读:对比学习如何让MOT模型学会“认人”?

对比学习如何重塑多目标跟踪&#xff1a;从特征判别到轨迹记忆的技术革命 在拥挤的街头&#xff0c;人类能轻易识别并持续关注某个特定行人——这种看似简单的生物视觉能力&#xff0c;却让计算机视觉系统奋斗了数十年。多目标跟踪&#xff08;MOT&#xff09;技术正经历着从&q…...

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统 在很多团队的第一印象里,Claude Code 只是“更强一点的命令行编码助手”。但一旦进入中大型研发场景,你很快会发现,真正决定它价值上限的,不是单次补全能力,而是它是否能够被纳入一套可验证、可治理…...