7、忘记密码中重置密码接口开发

简介: 业务逻辑:用户忘记登录密码,然后根据用户用户名找到用户之前设置的问题,用户填写问题答案,若答案正确用户即可重置密码,若回答问题错误,则提示回答错误,不允许重置密码。

业务逻辑:用户忘记登录密码,然后根据用户用户名找到用户之前设置的问题,用户填写问题答案,若答案正确用户即可重置密码,若回答问题错误,则提示回答错误,不允许重置密码。
1、根据用户的用户名后台查找出用户设置的问题:
controller

    @RequestMapping(value = "forget_get_question.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<String> forgetGetQuestion(String username){
            return iUserService.selectQuestion(username);
    }

server:

   ServerResponse selectQuestion(String username);

serverImpl:
首先我们先根据用户提供的用户名看用户名是否存在,如果用户名不存在。则返回客户端显示用户不存在,不进行下一步操作,如果用户名存在,则再查询用户设置的问题

//忘记密码
    public  ServerResponse selectQuestion(String username){
        ServerResponse validResponse=this.checkValid(username,Const.USERNAME);

        if(validResponse.isSuccess()){
            //用户不存在
            return ServerResponse.createByErrorMessage("用户不存在");

        }
        String question =userMapper.selectQuestionByUsername(username);

        if(StringUtils.isNotBlank(question)){
            return ServerResponse.createBySuccess(question);
        }
            return ServerResponse.createByErrorMessage("找回密码的问题是空");

    }

Mapper:

String selectQuestionByUsername(String username);

Mapper.xml:

  <!--找回密码-->
  <select id="selectQuestionByUsername" resultType="string" parameterType="string">
  select
  question
  from mmall_user
  where username=#{username}
  </select>

2、用户提交问题并且校验:
controller

 //提交问题答案
    @RequestMapping(value = "forget_check_answer.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<String> forgetCheckAnswer(String username,String question,String answer){

        return iUserService.CheckAnswer(username,question,answer);
    }

server:

    //校验问题的回答
    ServerResponse<String> CheckAnswer(String username,String question,String answer);

serverImpl:

/校验回答是否正确
    public ServerResponse<String> CheckAnswer(String username,String question,String answer){
        int resultCount=userMapper.checkAnwser(username,question,answer);

        if(resultCount>0){
            //说明问题及问题答案是这个用户的,并且回答正确

            String forgetToken= UUID.randomUUID().toString();

            TokenCache.setKey(TokenCache.TOKEN_PREFIX+username,forgetToken);

            return ServerResponse.createBySuccess(forgetToken);

        }
        //说明问题是这个用户,但是回答错误
        return  ServerResponse.createByErrorMessage("回答错误");
    }

Mapper:

//校验用户提交问题的答案是否正确
    int checkAnwser(@Param("username") String username, @Param("question") String question, @Param("answer") String answer);

Mapper.xml:

 <!--提交问题答案-->
  <select id="checkAnwser" resultType="int" parameterType="map">
  select
  count(1)
  from
  mmall_user
  where username=#{username}
  and question=#{question}
  and answer=#{answer}

  </select>

3、用户在回答问题正确的前提下重置密码:
controller

   //忘记密码中重置密码
    @RequestMapping(value = "forget_rest_password.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<String> forgetRestPassword(String username,String passwordNew,String forgetToken){
           return iUserService.forgetRestPassword(username,passwordNew,forgetToken);
    }

server:

//忘记密码状态下重置密码
    ServerResponse<String> forgetRestPassword(String username,String passwordNew,String forgetToken);

serverImpl:

  //忘记密码状态下重置密码
    public ServerResponse<String> forgetRestPassword(String username,String passwordNew,String forgetToken){

        if(StringUtils.isBlank(forgetToken)){
            return  ServerResponse.createByErrorMessage("参数错误,token需要传递");
        }

        ServerResponse validResponse=this.checkValid(username,Const.USERNAME);

        if(validResponse.isSuccess()){
            //用户不存在
            return ServerResponse.createByErrorMessage("用户不存在");

        }
        String token=TokenCache.getKey(TokenCache.TOKEN_PREFIX+username);

        if(StringUtils.isBlank(token)){
            return ServerResponse.createByErrorMessage("token无效或者过期");
        }

        if(StringUtils.equals(forgetToken,token)){
            String md5Password=MD5Util.MD5EncodeUtf8(passwordNew);

            int rowCount=userMapper.updatePasswordByUsername(username,md5Password);
            if(rowCount>0){
                return  ServerResponse.createBySuccessMessage("修改密码成功");
            }

        }else {
            return  ServerResponse.createByErrorMessage("token错误,请重新获取重置密码的token");
        }
            return  ServerResponse.createByErrorMessage("修改密码失败");
    }

Mapper:

 //忘记密码状态下重置密码
    int updatePasswordByUsername(@Param("username") String username, @Param("passwordNew") String passwordNew);

Mapper.xml:

<!-- //忘记密码状态下重置密码-->
  <update id="updatePasswordByUsername" parameterType="map" >
    update mmall_user
    set   password = #{passwordNew},update_time=now()
    where username = #{username}
  </update>

接口测试:
1、
查询用户名是否有效


img_b20c08d8d4de2528f5bc58d8c6ab8214.jpe
TIM截图20180912193755.jpg

2、查询出用户设置的问题以及校验用户回答的问答:
Ⅰ回答正确:


img_45cae5f5be2cd16838926cfaa5ae2b14.png
image.png

Ⅱ回答错误,返回回答错误:
img_b2b605feb9166a8d8eab495bc91f568f.png
image.png

3、修改密码:
img_c06b379eb66e864e9870b312b5be88f8.png
image.png
相关文章
|
8月前
|
Java 数据安全/隐私保护
注册登录账号系统
注册登录账号系统
221 0
|
9月前
|
安全 搜索推荐 Java
SpringSecurity-8-自动登录和注销功能实现
当我们在登录某一个网站的时候,我们会使用账号密码进行登录,但是我们不想每一次关闭浏览器,我们不想每一次重新输入账号和密码,贴合用户的登录体验,给用户带来方便,我们使用自动登录功能,将登录信息保存在浏览器的cookie中,这样用户在下次访问的时候,自动实现校验并新建登录状态。但是这样也会给用户带来信息泄露的危险。
94 0
|
10月前
|
API 数据安全/隐私保护
漏刻有时忘记超级管理员密码的解决方案:通过API接口设置超级管理员
漏刻有时忘记超级管理员密码的解决方案:通过API接口设置超级管理员
46 0
|
PHP
【laravel项目】@2 账号密码登录验证(2)
【laravel项目】@2 账号密码登录验证
60 0
【laravel项目】@2 账号密码登录验证(2)
|
PHP
【laravel项目】@2 账号密码登录验证(1)
【laravel项目】@2 账号密码登录验证
64 0
【laravel项目】@2 账号密码登录验证(1)
|
NoSQL Java Redis
手机验证码登录
手机验证登录分为三个API接口,分别为:获取图片验证码、获取手机短信验证码、登录。 1.获取图片验证码:通过工具类生成图片验证码,将随机验证码保存到session中,将图片验证码转为base64码放到对应的entity字段里。
8734 0
|
数据安全/隐私保护
ECshop 忘记密码,重置密码
ECshop 忘记密码,重置密码
238 0
ECshop 忘记密码,重置密码
|
数据库 数据安全/隐私保护
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
SpringMVC实现简单的用户管理系统——用户登录注册、修改密码、注销功能
|
JavaScript 数据安全/隐私保护
点击忘记密码,显示重置密码的方式(五)
当点击忘记密码时,会在下面弹出一个可以找回密码的方式面板。比在下面直接扔出一个,通过手机号找回,通过邮箱找回,联系管理员找回强太多了。
258 0
点击忘记密码,显示重置密码的方式(五)
|
Java 开发者
登录功能之添加验证码|学习笔记
快速学习登录功能之添加验证码
133 0
登录功能之添加验证码|学习笔记