此功能是基于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加密,不需要的可以自行删除