page contents

php 实现密码错误三次锁定账号10分钟

以下内容希望帮助到大家!

attachments-2020-04-GyJBWorH5e84429cb50b4.jpg

直接上个代码


  /**
     * 登录
     * 1、接收数据
     * 2、正则判断接收到的数据是否合理
     * 3、根据用户名获取用户数据
     *      获取到数据 -> 继续执行
     *      没有获取到数据 -> 提示:用户名密码错误
     * 4、判断锁定时间
     *      当前时间和锁定时间差 大于 10分钟 或者 没有锁定时间 -> 继续执行
     *      当前时间和锁定时间差 小于 10分钟 -> 提示:账号锁定中、请10分钟后再试
     * 5、判断密码
     *      == 
     *          次数=0
     *          登录成功
     *      != 
     *          次数 大于等于 2 -> 锁定操作、次数=0  -> 账号已经锁定
     *          次数 小于 2  次数+1 -> 账号密码错误
     */

    public function login()
    {
        $name = request()->post('name', '');
        $pwd = request()->post('pwd', '');
        if ( $name == '' || $pwd == '' || $name == null || $pwd == null) {
            $arr['code'] = 1;
            $arr['msg'] = '参数错误、用户名或密码不能为空';
            $arr['data'] = [];
            return json($arr);
        }

        $preg_name = '/^[\x{4e00}-\x{9fa5}]{2,5}$/u';
        if( !preg_match( $preg_name, $name ) )
        {
            $arr['code'] = 1;
            $arr['msg'] = '用户名要求必须是2到5位的汉字';
            $arr['data'] = [];
            return json($arr);
        }

        $preg_pwd = '/^\S{5,18}$/';
        if (!preg_match($preg_pwd, $pwd)) {
            $arr['code'] = 1;
            $arr['msg'] = '密码要求必须5到18位非空字符串';
            $arr['data'] = [];
            return json($arr);
        }

        $where['user_name'] = $name;
        $res = Db::table('user')->field('user_id,user_name,user_pwd_login,user_lock_time,user_pwd_num')->where($where)->find();
        if (!$res) {
            $arr['code'] = 1;
            $arr['msg'] = '用户名或密码错误、请重试';
            $arr['data'] = [];
            return json($arr);
        }

        if($res['user_lock_time'] != '' && time() - strtotime($res['user_lock_time']) < 1*60 ) 
        {
            $arr['code'] = 1;
            $arr['msg'] = '该账号已被锁定、请10分钟后重试';
            $arr['data'] = [];
            return json($arr);
        }

        $upd_where['user_id'] = $res['user_id'];
        if( $pwd != $res['user_pwd_login'] )
        {
            // 次数 大于等于 2 -> 锁定操作、次数=0 -> 账号已经锁定
            if( $res['user_pwd_num'] >= 2 )
            {
                $upd_data['user_lock_time'] = date('Y-m-d H:i:s', time() );
                $upd_data['user_pwd_num'] = 0;
                Db::table('user')->where($upd_where )->update( $upd_data );
                $arr['code'] = 1;
                $arr['msg'] = '账号密码错误次数超过3次、账号锁定10分钟、请稍后重试';
                $arr['data'] = [];
                return json($arr);
            }
            else
            {
                // 次数 小于2 次数+1 -> 账号密码错误
                Db::table('user')->where($upd_where)->setInc('user_pwd_num');
                $arr['code'] = 1;
                $arr['msg'] = '账号密码错误、剩余'. (3 - ($res['user_pwd_num'] + 1) ) .'次、请稍后重试';
                $arr['data'] = [];
                return json($arr);
            }
        }

        Db::table('user')->where($upd_where)->update(['user_pwd_num'=>0]);
        
        Session::set('user', $res);
        $arr['code'] = 0;
        $arr['msg'] = '登录成功';
        $arr['data'] = $res;
        return json($arr);
    }


attachments-2020-04-sUThb50b5e84426d30416.jpg

  • 发表于 2020-04-01 15:28
  • 阅读 ( 409 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章