本文最后更新于 2026年1月24日 晚上
优化验证码发送的接口
前言
由于先前的接口设计有缺陷
导致发送验证码的方式多样化时会需要一堆接口
先前就设计了有关验证码发送的接口就有五个
现在将五个接口改为一个
后端只需要验证前端发来的参数account和type(手机号/邮箱,登录/注册/修改密码)
然后通过判断类型来发送不同类型的验证码
包含 @ → 邮箱
符合 1[3-9]\d{9} → 手机号
其他 → 返回错误提示
前端的工作只需要传account和type两个参数就行了
修改前端有关接口接受的代码
验证码登录页面修改
忘记密码页面修改
注册页面修改
修改SendCodeDto,为前端传参创造两个字段
修改服务类中发送验证码接口,去除掉先前的这么多个发送验证码方法,统一为有关方法实现
同时做出多重判断防止前端传入错误或空的参数,也防止恶意攻击者绕过前端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| @Override public ResponseResult sendCode(SendCodeDto dto) { if (!StringUtils.hasText(dto.getAccount())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "账号不能为空"); } if (!StringUtils.hasText(dto.getType())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "验证码类型不能为空"); } String account = dto.getAccount().trim(); String type = dto.getType().toLowerCase(); if (!type.equals("login") && !type.equals("register") && !type.equals("forgot_password")) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "验证码类型无效"); } String channel; if (account.contains("@")) { channel = "email"; } else if (account.matches("^1[3-9]\\d{9}$")) { channel = "phone"; } else { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "请输入正确的邮箱或手机号"); } boolean needAccountExists = !type.equals("register"); return sendVerificationCode(account, channel, type, needAccountExists); }
|
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2025 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/