form data处理明文密码_【20201221】做个用户管理系统(32)——忘记密码之验证用户信息...

1. 介绍

1.1 介绍

福哥今天带着大家完成TFUMS系统的忘记密码功能的第一步——验证用户信息。因为用户数据表里userName和userEmail都是唯一的,它们都可以作为忘记密码的验证手段。而userEmail是需要登录后进行绑定邮箱才会产生的,也就是说它不一定是存在的。

综上所述,福哥决定userName和userEmail都要验证,只要其中一个验证通过了就可以了。由于userName是一定存在的,所有福哥优先验证userName。

还有一个问题,邮箱的特点是包含一个“@”字符的,为了避免有人拿邮箱作为用户名注册的冲突问题,福哥还要在注册地方限制用户名不能包含“@”字符才行。

手机号码注册是一个很主流的设计,福哥今后会添加绑定手机号码的功能,手机号码也会成为忘记密码的验证手段,所以用户名也不能是一个手机号码。

2. 注册接口控制器

福哥在注册接口控制器里增加了对用户名的格式的判断逻辑。

if(preg_match("/[\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\|\\\{\}\[\]\:\;\"\'\\,\.\?\/]/", $userName)){    return $this->tfphp->getResponse()->responseJSON_CM(200, 1001001, "用户名不能包含特殊符号");}if(preg_match("/^1\d{10}$/", $userName)){    return $this->tfphp->getResponse()->responseJSON_CM(200, 1001001, "用户名不能是手机号码");}

3. 注册视图模板

福哥在注册视图模板里也增加了对用户名的格式的判断逻辑。

[    {type:"empty", name:"user", msg:"请填写用户名"},    {type:"min", value:2, name:"user", msg:"用户名最少2个字"},    {type:"max", value:20, name:"user", msg:"用户名最多20个字"},    {type:"mre", value:/[\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\|\\\{\}\[\]\:\;\"\'\\,\.\?\/]/, name:"user", msg:"用户名不能包含符号"},    {type:"mre", value:/^1\d{10}$/, name:"user", msg:"用户名不能是手机号码"},    {type:"empty", name:"pass", msg:"请填写密码"},    {type:"min", value:6, name:"pass", msg:"密码最少6个字"},    {type:"empty", name:"confirmPass", msg:"请填写确认密码"},    {type:"empty", name:"vsn", msg:"请填写验证码"},]

4. 模型user

4.1 forgot

public function forgot(string $user):?string {    $myAES = new TFAES($this->tfphp);    if(strpos("@", $user) !== false){        $userInfo = $this->getByTable("userByEmail", array($user));    }    else{        $userInfo = $this->getByTable("userByName", array($user));    }    if($userInfo != null){        $userInfoData = serialize(array('userID'=>$userInfo['userID'],'userName'=>$userInfo['userName'],'userEmail'=>$userInfo['userEmail']));        $userInfoDataEncrypted = $myAES->encrypt($userInfoData, TFConfig::get("projectAESPK", "system"). date("YmdH0000"), "");        return $userInfoDataEncrypted;    }    return null;}

5. 验证用户信息接口

5.1 user_process

protected function user_process(){    $req = $this->tfphp->getRequest();    $post = $req->post;    $user = new user($this->tfphp);    $userName = $post->get("user");    try{        // request test        if($userName == ""){            return $this->tfphp->getResponse()->responseJSON_CM(200, 1001081, "错误请求");        }        // forgot user        $ret = $user->forgot($userName);        if($ret != null){            return $this->tfphp->getResponse()->responseJSON_CM(200, 0, "OK", array('sn'=>$ret));        }        else{            return $this->tfphp->getResponse()->responseJSON_CM(200, 1001082, "找不到匹配的用户");        }    }    catch(\TypeError $e){        return $this->tfphp->getResponse()->responseJSON_CM(200, 1001081, "错误请求");    }    // output    return $this->tfphp->getResponse()->responseJSON_CM(200, 1001081, "错误请求");}

6. 验证用户信息模板

6.1 HTML代码

<div class="row login-form">    <div class="col-sm-12">        <h3 class="text-center">忘记密码h3>        <p>请输入正确的用户名或者邮箱地址p>        <form action="forgotWay.htm">            <div class="form-group">                <label>用户名/邮箱地址label>                <input class="form-control" type="text" name="user" />            div>            <div class="form-group">                <button class="btn btn-primary btn-sm form-control">下一步button>            div>        form>    div>div>

6.2 JS代码

$('form').form({    url: "api/member/forgot",    method: "post",    validations: [        {type:"empty", name:"user", msg:"请填写用户名或者邮箱地址"},    ],    onSuccess: function (d) {        if(d.errcode == 0){            document.location = 'server->BASE_URI %>forgotWay.htm?sn='+d.sn;        }        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();    }});

7. 讲解

7.1 模型user

7.1.1 forgot

这里判断了如果用户名包含“@”就当作邮箱地址处理,否则就当作用户名处理。

7.2 验证用户信息接口

7.2.1 user_process

标准的表单处理程序,使用模型user的forgot方法验证用户信息。

7.3 验证用户信息模板

7.3.1 HTML

表单只有一个用户名的输入框,可以输入用户名或者邮箱地址。

7.3.2 JS

标准的表单JS驱动程序,处理成功的话会从返回数据里面拿到sn串缀到forgotWay.htm后面跳转过去。

8. 效果

a69c1bd9889246272bb8bbb987a2c1da.png

9. 总结

福哥今天带着童鞋们完成了忘记密码功能的第一步——验证用户信息表单的功能。这里面引出了注册用户名的格式限制的问题,为了避免冲突,我们又在用户注册的地方限制了用户名不能包含“@”字符,也不能是一个手机号码。

像这样的返工是不可避免的,在快速生产的现如今,不会有太多时间让我们仔细去推敲的。所以,大家要坦然看待返工的问题,真正的互联网公司的研发团队每天不返工才是不正常的。为什么?可以去问问产品经理去,哈哈哈~~

下一课,我们继续开发忘记密码功能,记得来看哦~~


【20201220】做个用户管理系统(31)——绑定邮箱和安全问题的状态

【20201219】做个用户管理系统(30)——设置安全问题的实现


免费看文章,自己学技术


每一篇文章都是福哥一个字一个字地敲出来的,都是福哥原创的。

每一篇文章都是经过了福哥的反复验证的,都是可以正常使用的。


63c87b008ef0610ae32d967995fd4375.png

2993a82ad57946d108e690410b990c12.png


版权声明:本文为weixin_32228727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。