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类视图,并且写出步骤 ...
随机推荐
- CDS标准视图:设备信息 I_EquipmentData
视图名称:I_EquipmentData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Equipment Data' @VDM.viewType: #COM ...
- nginx平台初探-5
nginx的请求处理阶段 (90%) 接收请求流程 (99%) http请求格式简介 (99%) 首先介绍一下rfc2616中定义的http请求基本格式: Request = Reques ...
- SpringBoot的两种启动方式原理
使用内置tomcat启动 配置案例 启动方式 IDEA中main函数启动 mvn springboot-run java -jar XXX.jar 使用这种方式时,为保证服务在后台运行,会使用nohu ...
- MySQL中联合主键的 in 查询
就一句话: SELECT * from Projects WHERE (Prj,SubID) in (SELECT Prj,SubID FROM SP where stage='设计' and 负责人 ...
- C# 深度学习框架 TorchSharp 原生训练模型和图像识别-手写数字识别
目录 开始使用 Torch 准备 下载数据集 显示图片 加载数据集 定义网络 优化模型参数 训练模型 保存和加载模型 使用模型识别图片 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址:h ...
- 设置npm、yarn和pnpm的国内镜像地址和yarn命令相关问题
1.npm 全局设置: 输入如下命令查看镜像地址: npm config get registry 输入如下命令设置镜像地址为淘宝: // 推荐地址 npm config set registry h ...
- min-max 容斥(最值反演)学习笔记
min-max 容斥,又名最值反演(我其实更喜欢后面这个名字),是一种常用的反演思想. 引入 在皇后游戏一题中,我们曾经证明过 \(\max(a,b)-a-b=-\min(a,b)\). 我们尝试推广 ...
- [ZJOI2015]幻想乡战略游戏 题解
题目链接:\(luogu\) 声明变量: \(tr1/tr2\):原树/点分树,用链式前向星维护 求链长(包括求 \(lca\)) \(a_i\):原树欧拉序 \(st_{i,j}\):\(RMQ\) ...
- js提示Cannot read property ‘replace‘ of undefined
JS提示Cannot read property 'replace' of undefined 出现这个错误的原因一般是传的参数为null 在传参之前加个是否为null的判断可以解决异常.
- 探秘Transformer系列之(6)--- token
探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念.作为一个抽象符号,人是可以理解每个语言单词的意义的,但是现在的NLP语言模型无法直接的从感知中抽象出每个 ...