Browse Source

占使用 cookie 限制短信验证码 60秒发送一次

master
wanghongjun 2 years ago
parent
commit
d7a450b0e3
  1. 28
      app/controller/Passport.php

28
app/controller/Passport.php

@ -47,6 +47,9 @@ class Passport extends BaseController
// 注册用户 // 注册用户
if ($userModel->register($data)) { if ($userModel->register($data)) {
Cookie::delete('send_code'.$_SERVER['HTTP_HOST']);
return $this->renderSuccess('注册成功'); return $this->renderSuccess('注册成功');
} else { } else {
return $this->renderSuccess('手机号已注册'); return $this->renderSuccess('手机号已注册');
@ -70,14 +73,15 @@ class Passport extends BaseController
$count = 0; $count = 0;
$defaultCount = 3; $defaultCount = 3;
try { try {
$cookie_name = 'login_count'.$_SERVER['HTTP_HOST'];
// 验证用户输入 // 验证用户输入
validate(UserValidate::class)->scene('login')->check($data); validate(UserValidate::class)->scene('login')->check($data);
# 验证码验证 # 验证码验证
if ($count = Cookie::get('login_count'.$_SERVER['HTTP_HOST'])) { if ($count = Cookie::get($cookie_name)) {
Cookie::set('login_count'.$_SERVER['HTTP_HOST'],$count+1); Cookie::set($cookie_name,$count+1);
} else { } else {
Cookie::set('login_count'.$_SERVER['HTTP_HOST'],1); Cookie::set($cookie_name,1);
} }
if ($count > $defaultCount) { if ($count > $defaultCount) {
$this->validate($data,['captcha|验证码'=>'require|captcha']); $this->validate($data,['captcha|验证码'=>'require|captcha']);
@ -91,6 +95,7 @@ class Passport extends BaseController
$userinfo = ['id' => $user['data']['id'], 'avatar' => $user['data']['avatar']]; $userinfo = ['id' => $user['data']['id'], 'avatar' => $user['data']['avatar']];
$token = ['token'=>signToken($userinfo)]; $token = ['token'=>signToken($userinfo)];
Cookie::delete($cookie_name);
return $this->renderSuccess('登陆成功',$token); return $this->renderSuccess('登陆成功',$token);
} else { } else {
throw new ValidateException($user['msg']); throw new ValidateException($user['msg']);
@ -104,16 +109,28 @@ class Passport extends BaseController
/** /**
* 发送短信验证码 * 发送短信验证码
* @return array|void * @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/ */
public function sendCode() public function sendCode()
{ {
$data = Request::param(); $data = Request::param();
try { try {
$cookie_name = 'send_code'.$_SERVER['HTTP_HOST'];
validate(UserValidate::class)->scene('sendCode')->check($data); validate(UserValidate::class)->scene('sendCode')->check($data);
if ($time = Cookie::get($cookie_name)) {
$s = time() - $time;
if ($s < 60) {
return $this->renderError("请等待 {$s} 秒后操作",['residue_time' => $s]);
} else {
Cookie::delete($cookie_name);
}
}
$phone = $data['phone']; $phone = $data['phone'];
$code = rand(1000 , 9999); $code = rand(1000 , 9999);
@ -127,6 +144,9 @@ class Passport extends BaseController
$res = $Pincode->sendSave($phone,$code); $res = $Pincode->sendSave($phone,$code);
if ($res['status']) { if ($res['status']) {
Cookie::set($cookie_name,time());
return $this->renderSuccess('发送成功' , ['code' => $code]); return $this->renderSuccess('发送成功' , ['code' => $code]);
} else { } else {
throw new ValidateException('发送失败'); throw new ValidateException('发送失败');

Loading…
Cancel
Save