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

发布于 2022-09-02 12:23:26 字数 66 浏览 14 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

神经大条 2022-09-09 12:23:26

对于发送短信的限制,在客户端和服务端都要加上限制,客户端比较容易,给按钮加个倒计时就能防住大部分的小白用户。服务器端,使用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方面的限制。

当爱已成负担 2022-09-09 12:23:26

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

梦醒灬来后我 2022-09-09 12:23:26

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

慕巷 2022-09-09 12:23:26

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

荆棘i 2022-09-09 12:23:26

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

染墨丶若流云 2022-09-09 12:23:26

肯定是后台限制的,前端限制的不靠谱。
不过如果你用的阿里之类的平台,平台本身就会有限制,每分钟每小时每天最多给同个手机号发送多少条短信。不同手机号就没辙了。

剑心龙吟 2022-09-09 12:23:26

这个问题和其他答案水平都太低!作为项目大量用到短信验证码的我真的看不下去了!

问题本身,限制给同个用户频繁发送短信,这种需求还要提吗?不就是缓存到redis或mongodb或mysql,发送的时候检测下。
而用到短信验证码,更加关键的是防止短信接口被盗刷,也就是给不同用户频繁发送短信,这个问题竟然没有提出来。唉,segmentfault的整体技术水平,讨论氛围还是不够的。

如果不想费心,还是试试一些集成的账号系统吧,比如 http://www.onlyid.net 的。就不要再提这种问题浪费大家时间了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文