thinkphp6短信或者邮箱验证码防刷代码

    //发送邮箱验证码
    public function sendEmailCode(Request $request)
    {




        //接收参数
        $params = $request->param();

        //表单验证
        try {
            validate([
//                'captcha|验证码'  => 'require|captcha',
'route|空间路由地址' => 'require|regex:/^(?!-)((?!--)[0-9a-zA-Z-]){1,39}(?<!-)$/|unique:user|token',
'email|邮箱'     => 'require|email|unique:user',
'password|密码'  => 'require|min:6|max:18'
            ], [
                'route.regex' => "个人空间地址只能为包含字母、数字、或单个连字符(-),且不能以连字符开头或结尾的最大长度为39位的地址",
            ])->check($params);
        } catch (ValidateException $e) {
            return fail($e->getError());
        }


        //验证方式一.限制1分钟内不能重复发送
//        $last_time = cache("register_email_time_" . $params['email']);
//        $countdown = 60;
//        $fds = time() - $last_time;
//        if ($fds < $countdown) {
//            return fail('发送频繁,请 ' . ($countdown - $fds) . ' 秒稍后重试~');
//        }

        //验证方式二:限制ip每天只能发送3次
        $send_times = cache("register_ip_" . $request->ip());
        if ($send_times > 2) {
            return fail('请24小时后再次尝试!22');
        }

        //验证方式三:限制手机号/邮箱每天只能发送3次短信
        $send_times = cache("register_times_" . $params['email']);
        if ($send_times > 2) {
            return fail('请24小时后再次尝试!33');
        }

        //发送验证码
        $code = mt_rand(100000, 999999);
        $body = $code . " 是你的邮箱注册激活码";



        if (sendmail($params['email'], '
上一篇:Ansible : fail & fail_when & change_when & check_mode & register & ignore_errors


下一篇:PCIe扫盲——中断机制介绍(MSI-X)