Redis 应用场景之短信验证码
应用场景
以 OSChina 账号注册 为例...讲错了请留言批评指正...

逻辑场景
- 用户操作: 用户输入手机号, 然后点击获取验证码.
- 前端逻辑: ajax 发起请求, 参数带上手机号.
- 后端逻辑: 获取请求参数, 生成6位数验证码, 给指定手机号发送短信, 并缓存一个30秒过期的键值, mobilephone=checkcode, 比如 135xxx=123456
用 redis-cli 操作的话命令如下:
// 设置一个缓存 key=手机号 value=验证码, 30秒后过期自动删除
127.0.0.1:6379> set 135xxx 123456
OK
127.0.0.1:6379> expire 135xxx 30
(interger) 1
- 用户操作: 用户收到短信验证码后,输入验证码,点击注册.
- 前端逻辑: ajax 请求接口, 参数带上发送手机号 & 短信验证码.
- 后端逻辑: 拿着请求参数中的手机号做为 redis key 去找值
用 redis-cli 操作的话命令如下:
127.0.0.1:6379> get 135xxx
"123456"
如果没过期的话会输出对应的验证码 "123456", 程序里做判断比对.
如果等待30s过期的话, redis-cli 操作输出如下:
127.0.0.1:6379> get 135xxx
(nil)
会输出(nil), 代表无, 这个缓存键及值直接被 redis 自动删除了. 这个时候页面可以提示用户 "验证码过期请重新获取验证码" 之类的.
注意事项
- key 要唯一, value 允许重复, 这里充分运用了 redis set 自带去重属性, mobilephone:=checkcode(最新的验证码)
- 你一不小心输错成了别人手机号, 那个人也账号在注册,并且你们2的验证码一不小心是一样的 - 所以为了安全考虑不要单纯只拿手机号和验证码作为注册和登录的依据,非常不安全,现在很多app就是这样干的,为了让你尽快注册放弃了很大安全性。想想上面的注册登录换成支付场景, 所以验证码通常是30-60秒的有效期, 如果恶意去尝试的会直接过期了. 如果查手机号的话, 这么短的时间内也试不了几个手机号. 通过时效性来保障相对的安全性.
- ...
Redis 应用场景之短信验证码的更多相关文章
- spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)
一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ...
- Spring Security构建Rest服务-1203-Spring Security OAuth开发APP认证框架之短信验证码登录
浏览器模式下验证码存储策略 浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验. APP模式下验证码存储策略 在app场景下里是没有cookie信息 ...
- php实现的IMEI限制的短信验证码发送类
php实现的IMEI限制的短信验证码发送类 <?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = ...
- flask开发restful api系列(5)-短信验证码
我们现在开发app,注册用户的时候,不再像web一样,发送到个人邮箱了,毕竟个人邮箱在移动端填写验证都很麻烦,一般都采用短信验证码的方式.今天我们就讲讲这方面的内容. 首先,先找一个平台吧.我们公司找 ...
- Android Studio精彩案例(五)《JSMS短信验证码功能实现》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...
- vue_drf之实现短信验证码
一.需求 1,需求 我们在做网站开发时,登录页面很多情况下是可以用手机号接收短信验证码,然后实现登录的,那我们今天就来做一做这一功能. 伪代码: 进入登录页面,点击短信登录 输入手机号码,点击获取验证 ...
- 重构客户注册-基于ActiveMQ实现短信验证码生产者
重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...
- 潭州课堂25班:Ph201805201 django 项目 第十三课 短信验证码后台的实现 (课堂笔记)
d 发送短信验证码之前,后台要得到三个参数 : 1,用户手机吗,, 2,用户输入的图片验证文本, 3,前台的 uuid , 在60秒内是否有发送短信的记录 只有用户输入的手机号,文本信息与 uudi ...
- Django商城项目笔记No.6用户部分-注册接口-短信验证码实现celery异步
Django商城项目笔记No.4用户部分-注册接口-短信验证码实现celery异步 接上一篇,如何解决前后端请求跨域问题? 首先想一下,为什么图片验证码请求的也是后端的api.meiduo.site: ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
随机推荐
- MAC 使用问题汇总
1. 在.zshrc中添加的环境变量不起作用 Answer: 需要把/etc/zshrc文件复制到 ~, 并命名为.zshrc,然后设置环境变量即可:
- Elasticsearch中数据是如何存储的
前言 很多使用Elasticsearch的同学会关心数据存储在ES中的存储容量,会有这样的疑问:xxTB的数据入到ES会使用多少存储空间.这个问题其实很难直接回答的,只有数据写入ES后,才能观察到实际 ...
- Superset 稀奇古怪的bug
1.filterbox 及 native filter 等组件里面,日期筛选器下拉框,显示的不是日期格式,而是时间戳格式,如: 解决方法: 修改superset\utils\core.py 里面的js ...
- 一文搞懂 结构伪类 :nth-child && :nth-of-typ
结构伪类 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 不是从左往右选择 不是先父辈后筛选子类 ...
- DeepSeek本地安装部署(指南)
前言 这两天deepseek出圈了. 今天分享一下,如果在本地电脑部署和运行deepseek,实现AI对话的功能. 访问ollama官网: https://ollama.com/ 下载一个合适自己操作 ...
- jar包启停shell脚本
jar包控制脚本1 #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export APP_HOME=/u01/test export ...
- JavaDoc文档的介绍及生成方法
javaDoc命令是用来生成自己的API文档的 参数信息 @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @return 返回值情况 ...
- P9869 [NOIP2023] 三值逻辑 题解
NOIP2023 T2 三值逻辑 题解 题面 思路 乍一看好像很并查集,而且不太难,但是, 注意到:按顺序运行这 \(m\) 条语句 事情并没有那么简单. 比如说如下情况: x1:=T x2:=x1 ...
- 越“挖”越有料,天翼云“息壤”助攻DeepSeek变身万能搭子!
还在为DeepSeek服务器繁忙而抓狂? 还在为API调用费用涨价而头疼? 还在为数据安全而担忧? 别急! 天翼云"息壤"算力互联调度平台出马 全面解锁DeepSeek新玩法 带你 ...
- DeepSeek智能编程
技术背景 DeepSeek开源之后,让大家意识到了即时是在自己硬件性能一般的本地环境,也能够部署和使用大语言模型,真正实现了大模型的"私有化".而私有化大模型之后,自然是考虑生产力 ...