修改密码分两种
- 一种是用户已经登录了,通过旧密码来修改密码
- 一种是找回密码,找回密码也是修改密码
修改方式:
- 通过旧密码修改密码,只适用于已经登录的修改密码
- 通过邮箱发送验证码,修改对应邮箱注册的密码,适合两种case,不管是修改密码,还是找回密码都可以。
所以我们就以第二种作为例子吧,第一种同学们自行实现。
接口
/**
* 修改密码password
* 修改密码
* 普通做法:通过旧密码对比来更新密码
* <p>
* 即可以找回密码,也可以修改密码
* 发送验证码到邮箱/手机---> 判断验证码是否真确来判断
* 对应邮箱/手机号码所注册的账号是否属于你。
* <p>
* 步骤:
* 1、用户填写邮箱
* 2、用户获取验证码type=forget
* 3、填写验证码
* 4、填写新的密码
* 5、提交数据
* <p>
* 数据包括:
* <p>
* 1、邮箱和新密码
* 2、验证码
* <p>
* 如果验证码正确-->所用邮箱注册的账号就是你的,可以修改密码
*
* @return
*/
@PutMapping("/password/{verifyCode}")
public ResponseResult updatePassword(@PathVariable("verifyCode") String verifyCode,
@RequestBody SobUser sobUser) {
return userService.updateUserPassword(verifyCode, sobUser);
}
实现代码
/**
* 更新密码
*
* @param verifyCode
* @param sobUser
* @return
*/
@Override
public ResponseResult updateUserPassword(String verifyCode, SobUser sobUser) {
//检查邮箱是否有填写
String email = sobUser.getEmail();
if (TextUtils.isEmpty(email)) {
return ResponseResult.FAILED("邮箱不可以为空.");
}
//根据邮箱去redis里拿验证
//进行对比
String redisVerifyCode = (String) redisUtils.get(Constants.User.KEY_EMAIL_CODE_CONTENT + email);
if (redisVerifyCode == null || !redisVerifyCode.equals(verifyCode)) {
return ResponseResult.FAILED("验证码错误.");
}
redisUtils.del(Constants.User.KEY_EMAIL_CODE_CONTENT + email);
int result = userDao.updatePasswordByEmail(bCryptPasswordEncoder.encode(sobUser.getPassword()), email);
//修改密码
return result > 0 ? ResponseResult.SUCCESS("密码修改成功") : ResponseResult.FAILED("密码修改失败");
}