背景
通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。
原理
短信验证的原理按步骤可分为6步:
构造手机验证码。使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数;
使用接口向短信平台发送手机号和验证码数据。然后短信平台再把验证码发送到制定手机号上,接口参数一般包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令;
保存短信平台返回的信息。具体来说,将手机号、验证码和操作时间存入数据库,用于验证。
接收用户填写的验证码及其他数据。
对用户返回的数据和保存在数据库中的数据做匹配,同时判断提交动作是否在有效期内。
验证码正确且在有效期内,请求通过,处理相应的业务。
上述过程可以使用云函数和云数据库来实现。同时,考虑给云函数部署网关触发器,用户需要使用短信验证码服务时只需要往网关地址发送附带用户信息的请求。
详细方案
首先需要配置好云函数和云数据库,其中云函数和云数据库需要处于同一个VPC下,以便云函数能够直接访问云数据库。
接着创建一个简单的hello world函数模板并给该函数赋予访问腾讯短信平台的权限,即需要在到访问管理控制台给 SCF_QcsRole 角色添加短信 QcloudSMSFullAccess 权限。
接着编写代码实现短信验证逻辑,这里以nodejs为例子。
/**************************************************
* 功能:1.发送短信 2.登录(校验短信验证码)
* 函数运行的前提条件:
1.创建模板函数后,请先添加函数运行角色,并给该角色关联短信QcloudSMSFullAccess权限。
2.本服务用到redis存储验证码,请先申请redis资源,并将redis的host和密码设置成环境变量。
3.去云短信控制台申请短信模板和签名
* 详细请参考:https://github.com/tencentyun/scf-demo-repo/tree/master/Nodejs8.9-SmsVerificationCode
*********************************************