首页 > 登陆验证手机短信验证码方案

登陆验证手机短信验证码方案

客户登陆通过手机发送验证码登陆,如何防止同一个手机号频繁获取验证码,目前获取的短信存入数据库中,期待大神给个好的方案。


1.前端js控制60秒才能重发。
2.验证码发送成功后,把发送时间,手机号,验证码都存入session。如果有新的发送请求,比对上一次发送时间,限制30分钟等


使用redis缓存做键值对存储,手机号做key,验证码做value,然后做上过期时间。用户发起请求验证码时就去redis里面找,如果key存在则不发短信并提示,如果不存在,则发送短信


对于发送短信的限制,在客户端和服务端都要加上限制,客户端比较容易,给按钮加个倒计时就能防住大部分的小白用户。服务器端,使用Redis的setex是个很好的方法,可以在成功发送短信给某个手机号后使用setex命令加入一个有时限的标志位。如果这个标志位存在的话,就不发送并提示错误。比如这样

async function sendSMS(req,res){
        let phonenumber=req.query.phonenumber
        let result=await redis.exists(phonenumber+'SMSSended');//检测是否存在
        if(result)
            return false;
        else{
               //在这里使用你的方法发送你的短信
               await redis.setex(phonenumber+'SMSSended',60,1);//设置一个60秒的标志位
               return true;
        }
    }

当然上面的限制属于比较简单的,你也可以根据需要加入IP,Session方面的限制。


获取频率限制下,如楼上所说方案即可,也可记录一下频次,对过于频繁的实施验证码策略。


做这种功能我们都会去参考一些大型软件,因为这些软件基本都是满足用户的使用习惯。
所以,当你注册淘宝啊等等一些软件的时候,它会加入一个倒计时的操作,这样在前端就控制住了不能够频繁点击
的问题,也符合用户的使用习惯,谢谢!

【热门文章】
【热门文章】