讯联云库项目开发技术栈总结(一)
1.如何实现QQ邮件注册账号:
-
前端交互流程:
- 用户在前端填写注册表单(包括邮箱)
- 前端请求获取图片验证码(
/checkCode
) - 用户输入图片验证码后,前端调用
/sendEmailCode
发送邮件验证码 - 用户收到邮件验证码后,输入验证码完成注册
-
后端处理流程:
-
AccountController
处理发送邮件验证码请求 -
验证图片验证码是否正确(防止机器人)
-
调用
EmailCodeService.sendEmailCode()
方法
controller层:
service层:
-
检查邮箱是否已注册(如果是注册类型)
-
生成随机5位验证码
-
发送邮件(使用JavaMailSender,它是 Spring Framework 提供的一个用于发送电子邮件的核心接口)调用sendMailCode()方法
通过这个方法获取发邮件的人
调用这个方法让redis读取系统dto模板
尝试从Redis读取(此时返回null),发现为空时,创建默认配置
最后保存到Redis(无过期时间),其中code代替掉%s是随机验证码,然后再通过RedisComponent获取的信息get出来导入邮件对象message
-
回到sendEmailCode()方法,之后禁用该邮箱之前的验证码(设置状态为无效),只有最新的验证码会生效,因为status=0,其他都是1,索引实现幂等性
幂等性保障:
即使多次调用 sendEmailCode()方法
,每次都会先使旧验证码失效,再生成新验证码。最终效果是:无论调用多少次,用户只能使用最新发送的验证码,旧验证码无法重复使用。