VerificationCodeController.php
4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Dean <zxxjjforever@163.com>
// +----------------------------------------------------------------------
namespace app\user\controller;
use cmf\controller\HomeBaseController;
use think\facade\Validate;
class VerificationCodeController extends HomeBaseController
{
public function send()
{
$validate = new \think\Validate([
'username' => 'require',
'captcha' => 'require',
]);
$validate->message([
'username.require' => '请输入手机号或邮箱!',
'captcha.require' => '图片验证码不能为空',
]);
$data = $this->request->param();
if (!$validate->check($data)) {
$this->error($validate->getError());
}
$captchaId = empty($data['captcha_id']) ? '' : $data['captcha_id'];
if (!cmf_captcha_check($data['captcha'], $captchaId, false)) {
$this->error('图片验证码错误!');
}
$registerCaptcha = session('register_captcha');
session('register_captcha', $data['captcha']);
if ($registerCaptcha == $data['captcha']) {
cmf_captcha_check($data['captcha'], $captchaId, true);
$this->error('请输入新图片验证码!');
}
$accountType = '';
if (Validate::is($data['username'], 'email')) {
$accountType = 'email';
} else if (cmf_check_mobile($data['username'])) {
$accountType = 'mobile';
} else {
$this->error("请输入正确的手机或者邮箱格式!");
}
if (isset($data['type']) && $data['type'] == 'register') {
if ($accountType == 'email') {
$findUserCount = db('user')->where('user_email', $data['username'])->count();
} else if ($accountType == 'mobile') {
$findUserCount = db('user')->where('mobile', $data['username'])->count();
}
if ($findUserCount > 0) {
$this->error('账号已注册!');
}
}
//TODO 限制 每个ip 的发送次数
$code = cmf_get_verification_code($data['username']);
if (empty($code)) {
$this->error("验证码发送过多,请明天再试!");
}
if ($accountType == 'email') {
$emailTemplate = cmf_get_option('email_template_verification_code');
$user = cmf_get_current_user();
$username = empty($user['user_nickname']) ? $user['user_login'] : $user['user_nickname'];
$message = htmlspecialchars_decode($emailTemplate['template']);
$message = $this->display($message, ['code' => $code, 'username' => $username]);
$subject = empty($emailTemplate['subject']) ? 'ThinkCMF验证码' : $emailTemplate['subject'];
$result = cmf_send_email($data['username'], $subject, $message);
if (empty($result['error'])) {
cmf_verification_code_log($data['username'], $code);
$this->success("验证码已经发送成功!");
} else {
$this->error("邮箱验证码发送失败:" . $result['message']);
}
} else if ($accountType == 'mobile') {
$param = ['mobile' => $data['username'], 'code' => $code];
$result = hook_one("send_mobile_verification_code", $param);
if ($result !== false && !empty($result['error'])) {
$this->error($result['message']);
}
if ($result === false) {
$this->error('未安装验证码发送插件,请联系管理员!');
}
$expireTime = empty($result['expire_time']) ? 0 : $result['expire_time'];
cmf_verification_code_log($data['username'], $code, $expireTime);
if (!empty($result['message'])) {
$this->success($result['message']);
} else {
$this->success('验证码已经发送成功!');
}
}
}
}