短信验证码的简单实现

简介: 短信验证码的简单实现

序言



短信验证码是所有 APP 必不可少的基础功能模块之一,这篇文章将会简单的实现这一功能。


短信接口平台



收发短信必须要借用通信运营商的通道,而不少短信接口平台通过自身与通信运营商对接并对外提供简单高效的 API 接口为广大的软件开发者提供了更加快捷优质的服务。


对于短信接口平台,我这里将其分为两种:


第一种,验证码由软件开发者(即短信接口平台的用户)提供,短信接口平台不会保存和处理验证码,也就是说验证码的校验过程需要由开发者处理;


另一种,验证码由短信接口平台提供,同时其会提供另一个负责校验此验证码的接口,即验证码不需要由开发者处理和校验,更加省事方便。


当然,一个短信接口平台是有可能同时提供以上两种接口的,至于具体的短信接口平台公司,这里就不提了。


验证码的存储



这里主要说下上述第一种短信接口的情况,即验证码由我们自己随机生成,并且我们需要将其存储以供后续判断验证码是否正确。


对于验证码的存储又可以分为以下两种:


第一种,验证码存储在服务器端的 session 中(其实随便一个对象都可以),不需要使用数据库资源,但是一旦服务器异常重启,session 中的数据将会全部清空,也就是说验证码一段时间内将会全部失效,同时另外一个必须重视的问题是,我们一定要清除掉 session 中的过期数据,不然其将会不停地占用内存以至于造成内存泄漏的情况。


第二种,验证码存储在数据库中,这样会占用额外的数据库资源,但显然服务器端将会更加轻松,同时不少数据库提供了 TTL ( time to live )的功能,通过设置数据的有效期,数据库将会自动删除掉过期的数据,当然,我们也可以单纯的存储验证码创建或失效的时间,拿取此时间自行判断验证码是否在有效期内。


以我的性格,肯定是用数据库的 TTL ,不用多说。


实现示例



用哪个数据库呢?直接用 mongo 就得了,本身就支持 TTL ,而且项目其它数据的存储也会用 mongo ,所以没有必要为了一个验证码多搞一个 redis 数据库上去,当然如果项目本身就会用 redis 做缓存的情况除外。


服务器端的逻辑过程:

1、接受用户的手机号,进行合法性判断。


2、随机产生 4 位数字验证码。


3、调用短信接口平台的 API 接口,将随机产生的验证码和用户的手机号作为输

入参数,接收此接口的输出并判断短信验证码是否成功发送。


4、将验证码和手机号存入数据库中,并设置 TTL 即验证码的有效时间。


5、校验过程,输入手机号和验证码查询数据库中是否有对应存在的数据。


大致过程就是这样。


具体实现:

1、手机号合法性判断:复杂的,查询三大运营商的合法个人号段,这个太麻烦且实际意义不大,简单一点弄,以 1 开头的 11 位数字即可,正则判断如下图:


2、随机生成验证码:Math.random() 自己去拼接吧。


3、短信平台的接口调用:不同平台接口不同,自己去看官方文档。


4、存储验证码和手机号、设置 TTL 有效时间:

这里用的 mongoose 如下图

注意红色圈出来的部分,在 schema 中 必须定义一个 date 类型的数据,且给其加上索引并设置 expires 即有效时间,实际操作的数据 arr 必须与此 schema 对应( 我在这卡了一整天才踏过了这个坑 ),对于存储则是此手机号若有记录则更新,若没有则直接创建,所以用了 findOneAndUpdate 并且有了最后的红色圈的设置。


5、验证码校验:查询是否有手机号和验证码同时匹配的数据即可。


完。


结束语



不知道写什么结束语,就这样结束吧。

目录
相关文章
|
安全 Java API
阿里云——Java实现手机短信验证码功能
通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。本文通过调用API开发一个短信验证码为例,带您了解如何实现短信验证码功能。
5700 5
阿里云——Java实现手机短信验证码功能
|
API PHP 开发工具
laravel中短信发送验证码的实现方法
在做用户注册和个人中心的安全管理时常常需要用到短信发送验证码,下面这篇文章主要给大家介绍了关于laravel中短信发送验证码的实现方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
3593 0
|
9月前
|
存储 前端开发 NoSQL
TienChin 验证码响应结果分析&验证码生成接口分析
首先从前端开始进行分析,进入到登录页面,打开开发者工具(f12),找到 network,f5 刷新一下页面,然后,筛选一下,筛选内容为 Fetch/XHR:
63 0
TienChin 验证码响应结果分析&验证码生成接口分析
|
10月前
|
SQL 小程序 搜索推荐
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
586 0
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
|
12月前
|
存储 安全 API
短信验证码工作原理
当我们在注册各大网站或APP时,通常需要输入验证码来确认身份。验证码是这些平台采用的一种机制,旨在确保用户的安全。那么问题来了:短信验证码在网络上的运作过程是怎样的呢?
短信验证码工作原理
|
12月前
|
小程序 JavaScript 开发者
小程序短信验证码登录,1分钟实现小程序发短信功能,借助云开发10行代码实现短信验证码登录小程序
小程序短信验证码登录,1分钟实现小程序发短信功能,借助云开发10行代码实现短信验证码登录小程序
518 0
|
Java 网络安全 开发工具
【总结】Java实现短信验证码
Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,本人初学Java,下面是我用Java实现短信验证码的总结。
【总结】Java实现短信验证码
|
Java 5G Maven
java实现手机验证码功能
手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用简单实用一下短信接口。
144 0
java实现手机验证码功能
|
Java 云计算
JAVA实现《阿里云发送短信验证码以及短信通知》
JAVA实现《阿里云发送短信验证码以及短信通知》
837 0
|
安全 Java 黑灰产治理
注册中验证码实现(项目案例)
今天,给大家介绍验证码的相关配置问题。众所周知,对传统验证码而言,便捷和安全长期以来一直是鱼与熊掌的关系。这可从12306与黄牛的博弈中看出端倪。
注册中验证码实现(项目案例)