修改密码分两种
- 一种是用户已经登录了,通过旧密码来修改密码
- 一种是找回密码,找回密码也是修改密码
修改方式:
- 通过旧密码修改密码,只适用于已经登录的修改密码
- 通过邮箱发送验证码,修改对应邮箱注册的密码,适合两种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("密码修改失败");
    }



















