用户微服务

用户信息验证与短信验证码实现
本文详细介绍了用户信息结构的数据库设计,包括用户名和密码的验证逻辑,以及使用阿里云SDK发送短信的过程。通过监听消息队列发送验证码,并利用Redis进行验证码的存储和过期管理,确保验证码的安全有效。整个流程涵盖了用户数据验证、短信服务和验证码管理的关键步骤。

用户信息结构


CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '密码,加密存储',
  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
  `created` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE
) 

验证信息逻辑

@Service
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserMapper userMapper;
 
    @Override
    public Boolean checkData(String data, Integer type) {
        User user = new User();
        switch (type){
            case 1 :
                user.setUsername(data);
                break;
            case 2 :
                user.setPhone(data);
                break;
            default:
                return null;
        }
        return this.userMapper.selectCount(user) == 0;
    }

返回结果:

  • 返回布尔类型结果:
    true:可用
    false:不可用

  • 状态码:
    200:校验成功
    400:参数有误
    500:服务器内部异常

发送短信

使用阿里的短信SDK。安装SDK工具包,根据注册提供的信息和demo发送短信。

消息监听

编写消息监听器,当接收到消息后,发送短信。

@Component
public class SmsListener {
 
    @Autowired
    private SmsUtils smsUtils;
 
    @Autowired
    private SmsProperties smsProperties;
 
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "leyou.sms.queue",durable = "true"),
            exchange = @Exchange(value = "leyou.sms.exchange",ignoreDeclarationExceptions = "true"),
            key = {"sms.verify.code"}
    ))
    public void listenSms(Map<String,String> msg){
        if (msg == null || msg.size() <= 0){
            //不做处理
            return;
        }
        String phone = msg.get("phone");
        String code = msg.get("code");
 
        if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(code)){
            //发送消息
            try {
                SendSmsResponse response = this.smsUtils.sendSms(phone, code, smsProperties.getSignName(), smsProperties.getVerifyCodeTemplate());
            }catch (ClientException e){
                return;
            }
        }else {
            //不做处理
            return;
        }
    }

验证码

验证码逻辑

业务逻辑是这样的:
1)我们接收页面发送来的手机号码
2)生成一个随机验证码
3)将验证码保存在服务端
4)发送短信,将验证码发送到用户手机

验证码保存

验证码有一定有效期,一般是5分钟,我们可以利用Redis的过期机制来保存。
UserService设置短信验证码在Redis的缓存时间为5分钟
Redis详情见这里
Spring data Redis详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万码无虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值