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、
查询用户名是否有效


TIM截图20180912193755.jpg

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


image.png

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

3、修改密码:
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容