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

如何基于Redis通过对接阿里云短信服务实现验证码登录

目录

一、大致流程

二、实现代码

1、依赖

2、发送验证码

3、检查验证码


这里简单记录一下

一、大致流程
  1. 用户请求发送验证码

    • 用户输入手机号,点击获取验证码
    • 后端生成验证码并通过阿里云短信服务发送。
  2. 存储验证码

    • 将验证码和发送时间存储在Redis中,以便后续验证。
    • 设置过期时间,例如5分钟。
  3. 用户输入验证码

    • 用户输入验证码并提交。
  4. 验证验证码

    • 从Redis中获取存储的验证码进行比对。
    • 验证成功后,允许用户登录。
  5. 清除过期数据

    • 一旦验证码验证成功或过期,及时清除Redis中的记录。
二、实现代码
1、依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-sms</artifactId>
    <version>你的版本号</version>
</dependency>
2、发送验证码
@Autowired
private StringRedisTemplate stringRedisTemplate;

@Autowired
private DefaultProfile profile;

@Autowired
private IAcsClient acsClient;

public void sendSms(String phoneNumber) {
    String code = String.valueOf(new Random().nextInt(899999) + 100000); // 生成6位验证码
    // 发送短信
    SendSmsRequest request = new SendSmsRequest();
    request.setPhoneNumbers(phoneNumber);
    request.setSignName("你的短信签名");
    request.setTemplateCode("你的短信模板");
    request.setTemplateParam("{\"code\":\"" + code + "\"}");

    try {
        acsClient.getAcsResponse(request);
        // 存储验证码到Redis,设置过期时间为5分钟
        stringRedisTemplate.opsForValue().set("sms:" + phoneNumber, code, 5, TimeUnit.MINUTES);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
3、检查验证码
public boolean verifySmsCode(String phoneNumber, String code) {
    String storedCode = stringRedisTemplate.opsForValue().get("sms:" + phoneNumber);
    if (storedCode != null && storedCode.equals(code)) {
        // 验证成功,清除Redis中的验证码
        stringRedisTemplate.delete("sms:" + phoneNumber);
        return true;
    }
    return false;
}


http://www.kler.cn/news/311180.html

相关文章:

  • LeetCode 876
  • 后端往前端传递数据json方法大全
  • 汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
  • 【Kubernetes】常见面试题汇总(十三)
  • 学习ROS2第一天—新手笔记(humble版本)
  • 关于Redis
  • Mamba YOLO World
  • 集合是什么
  • 金手指设计
  • CefSharp_Vue交互(Element UI)_WinFormWeb应用(3)---通过页面锁屏和关机(含示例代码)
  • 新的突破,如何让AI与人类对话变得“顺滑”:Moshi背后的黑科技
  • 【Webpack--011】配置开发和生产模式的webpack.config.js
  • 【算法】滑动窗口—找所有字母异位词
  • 解决使用nvm ls命令没有出现*的问题
  • 华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 2024 E卷 200分)
  • 【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作
  • 【Unity】URP Rendering总结
  • 【C++STL简介】——我与C++的不解之缘(八)
  • 【PyTorch】深入浅出PyTorch
  • 模版进阶(template)
  • Java项目: 基于SpringBoot+mybatis+maven洗衣店订单管理系统(含源码+数据库+开题报告+任务书+毕业论文)
  • 【Flink Flick CDC】学习笔记
  • 架构设计 - 常用日志收集方案选型对比与推荐
  • 【java面试每日五题之基础篇一】(仅个人理解)
  • ACL 2024:交叉领域情感分析——论文阅读笔记
  • Kotlin cancel CoroutineScope.launch的任务后仍运行
  • PDF标准详解(五)——图形状态
  • 104. 二叉树的最大深度【 力扣(LeetCode) 】
  • VIM使用技巧
  • 从openAI最新模型GPT-o1再谈思维链(Cot)技术,大模型该怎么提升其逻辑推理能力?