使用阿里云短信服务做手机找回密码功能

此功能是基于springboot+redis制作

阿里云的短信服务怎么用百度上教程也是铺天盖地我就不多做阐述,那么我们就直接步入正题,如何通过手机短信验证码进行密码重置操作。直接贴代码。

  //注入redis
    private RedisTemplate redisTemplate;
    @Resource
    private UserService userService;
    @RequestMapping("/Code")
    public Result getCode(String phone){
    if(phone == null){
          return new Result("300","请输入手机号",null,null,null);
    }
//       获取验证(sendMessage(String phone)做了处理,将随机生成的6位数字return给了sendMessage,)
    String dateCode = SendSms.sendMessage(phone);
    //将手机号作为key值 验证码作为value值存入redis里面去
    redisTemplate.opsForValue().set(phone,dateCode);
    //设置redis过期时间
    redisTemplate.expire(phone,86400, TimeUnit.SECONDS);
    return  new Result("200","发送成功,注意查收!",null,null,null);
}
@RequestMapping("/verification")
public Result verification(String phone, String dateCode, HttpSession session) throws Exception {
      //service层里面查出手机号
     User user = userService.selectUserByPhone(phone);
      //判断user是否为空 为空执行以下操作
     if(user == null){
        return  new Result("301","此号码不存在,请核对是否有误!",null,null,null);
    }
     //根据key取出value值 value值为验证码
     String code = redisTemplate.opsForValue().get(phone);
     //验证码逻辑操作
     if(code == null || code.equals("")){
        return new Result("302","验证码已过期,请重新获取!",null,null,null);
    }else{
        if(!dateCode.equals(code)){
            return new Result("300","验证码输入有误",null,null,null);
        }
    }
     //取出请求的sessionid
     String id = session.getId();
     //sessionid作为key值 电话作为value值出入redis中
     redisTemplate.opsForValue().set(id,phone);
     //设置过期时间
    redisTemplate.expire(id,30,TimeUnit.SECONDS);
    return new Result("200",phone,null,null,null);
}
@RequestMapping("/changePwd")
public Result changePwd(String pwd,HttpSession session) throws Exception {
    //取出请求的sessionid
    String sessionId = session.getId();
    //取出sessionid对应的value值也就是电话号码
    String phone1 = redisTemplate.opsForValue().get(sessionId);
     //通过service查询电话
    User user = userService.selectUserByPhone(phone1);
     //将新的密码存入user对象中
    user.setPwd(MD5Util.MD5(pwd));
    userService.update(user);
    return new Result("200","重置成功",null,null,null);
    }
}




数据验证可以前端验证或者后端验证都可以,我这边后端没有做过多的数据验证需要的可以自己自行添加。
上面的代码是controller的代码 service层 和serviceimpl层如何写的代码里面也有体现。
我做了密码MD5加密,不需要的可以自行删除

你可能感兴趣的:(java,redis,spring,boot)