介绍
介绍
福哥今天要带着大家完成TFUMS系统的修改登录密码功能。修改登录密码功能相对比较简单,一般网站会直接让登录用户随便改登录密码,这样存在一个问题,就是当用户登录后离开电脑,“陌生人”操作电脑修改了登录密码,用户回来后发现无法登录就尴尬了!
福哥为了避免这个问题,在修改登录密码的时候要求操作者(也可能不是用户本人)提高当前的登录密码,如果是用户本人肯定是知道的,如果不是那么一般情况下他也不知道当前的登录密码,也就不能完成修改登录密码的操作了。
模型user
passwd
public function passwd(int $userID, string $currPwd, string $newPwd):int { $tfdo = $this->tfphp->getDatabase()->getTFDO(); $userInfo = $this->getByTable("user", array($userID)); if($userInfo == null){ return 1; } if($userInfo['passwd'] != md5($currPwd)){ return 2; } $ret = $tfdo->update("user", array( 'passwd'=>md5($newPwd) ), null, "userID = @int", array( $userID )); if(!$ret){ return 3; } return 0; }
接口控制器
user_process
protected function user_process(){ $req = $this->tfphp->getRequest(); $post = $req->post; $user = new user($this->tfphp); $opass = $post->get("opass"); $npass = $post->get("npass"); $cpass = $post->get("cpass"); try{ // request test if($opass == "" || $npass == "" || $cpass == ""){ return $this->tfphp->getResponse()->responseJSON_CM(200, 1001051, "错误请求"); } if($npass != $cpass){ return $this->tfphp->getResponse()->responseJSON_CM(200, 1001051, "两次输入的新密码不一样"); } // create user $ret = $user->passwd($this->permission->getLoginStatus()->userID, $opass, $cpass); switch ($ret){ case 1: return $this->tfphp->getResponse()->responseJSON_CM(200, 1001052, "用户名不存在"); break; case 2: return $this->tfphp->getResponse()->responseJSON_CM(200, 1001053, "当前密码错误"); break; case 3: return $this->tfphp->getResponse()->responseJSON_CM(200, 1001054, "修改密码失败"); break; } } catch(\TypeError $e){ return $this->tfphp->getResponse()->responseJSON_CM(200, 1001051, "错误请求"); } // output return $this->tfphp->getResponse()->responseJSON_CM(200, 0, "OK"); }
视图模板
HTML代码
<!-- passwd form begin --> <div class="row login-form"> <div class="col-sm-12"> <h3 class="text-center">修改密码</h3> <p>请输入当前使用的密码,才能修改新密码</p> <form> <div class="form-group"> <label>当前密码</label> <input class="form-control" type="password" name="opass" /> </div> <div class="form-group"> <label>新密码</label> <input class="form-control" type="password" name="npass" /> </div> <div class="form-group"> <label>新确认密码</label> <input class="form-control" type="password" name="cpass" /> </div> <div class="form-group"> <button class="btn btn-primary btn-sm form-control">修改密码</button> </div> </form> </div> </div> <!-- passwd form end -->
JS代码
$('form').form({ url: "<% $TFReq->server->BASE_URI %>api/member/passwd", method: "post", validations: [ {type:"empty", name:"opass", msg:"请填写当前密码"}, {type:"empty", name:"npass", msg:"请填写新密码"}, {type:"min", value:6, name:"npass", msg:"新密码最少6个字"}, {type:"empty", name:"cpass", msg:"请填写新确认密码"} ], onSuccess: function (d) { if(d.errcode == 0){ document.location = '<% $TFReq->server->BASE_URI %>member/'; } else{ $('form').tips({ text:d.errmsg }); } }, onError: function (d) { $('form').tips({ text:"服务器响应错误" }); }, onValidationError: function (form, name, msg) { $('form').tips({ text:msg }); $('form').find('[name="'+ name +'"]').focus(); } });
讲解
模型user
passwd
首先检查用户是否存在,不存在就报错。
接着判断当前密码是否正确,相当于进行了一次身份校验。
如果一起都对的上,就更新用户的登录密码。
接口控制器
user_process
这里先检查表单数据是否正确,然后特别对新密码和新确认密码进行了校验,避免用户自己弄错了新密码。
最后调用模型user的passwd进行密码修改操作。
视图模板
HTML代码
这个表单有三个密码输入框,分别是opass(old)、npass(new)、cpass(confirm)。
JS代码
这是一个使用form控件驱动的标准表单处理程序,没什么可说的了,大家都熟悉了。
效果
总结
今天福哥带着童鞋们实现了TFUMS系统的修改登录密码功能,这个功能属于一个很标准的表单,不需要表单数据载入,也不需要验证码,算是很简单的一个功能了。
下一课福哥将带着童鞋们开始完成安全问题表单的功能了。