博客验证检查添加校验组件

Signed-off-by: XiaoLFeng <gm@x-lf.cn>
This commit is contained in:
筱锋xiao_lfeng 2023-06-30 10:01:41 +08:00
parent 7bf090d6e6
commit 01a3c71f02

View File

@ -264,119 +264,149 @@ public function apiCustomBlogCheck(HttpRequest $request): JsonResponse
{ {
/** @var array $returnData Json的 return 返回值 */ /** @var array $returnData Json的 return 返回值 */
// 验证数据 // 验证数据
$resultBlog = DB::table('blog_link') $dataCheck = Validator::make($request->all(),[
->select('id', 'blogOwnEmail') 'id' => 'required|int',
->find((int)$request->id); 'userEmail' => 'required|email',
if (!empty($resultBlog->id)) { 'userCode' => 'string|min:6|max:64|regex:#^[0-9A-Za-z]+$#',
// 检查输入博客是否对应 ]);
if (!empty($resultBlog->blogOwnEmail)) {
if (strcmp($resultBlog->blogOwnEmail, $request->email) == 0) {
// 生成验证码(筛查内容)
$resultVerifyCode = DB::table('code')
->where([
['email', '=', $resultBlog->blogOwnEmail],
['type', '=', 'CODE-CUSTOM-CHECK'],
['time', '>', time()]])
->get()
->toArray();
// 不存在验证码,生成验证码并存入数据库中
if (empty($resultVerifyCode[0]->id)) {
// 生成6位数验证码
$verifyCode = null;
for ($i = 0; $i < 6; $i++)
$verifyCode .= rand(0, 9);
// 存入数据库 if ($dataCheck->fails()) {
DB::table('code') $resultBlog = DB::table('blog_link')
->insert([ ->select('id', 'blogOwnEmail')
'email' => $resultBlog->blogOwnEmail, ->find((int)$request->id);
'code' => $verifyCode, if (!empty($resultBlog->id)) {
'type' => 'CODE-CUSTOM-CHECK', // 检查输入博客是否对应
'sendTime' => time(), if (!empty($resultBlog->blogOwnEmail)) {
'time' => time()+900, if (strcmp($resultBlog->blogOwnEmail, $request->email) == 0) {
]); // 生成验证码(筛查内容)
// 数据整理 $resultVerifyCode = DB::table('code')
$this->sendEmail = [
'userEmail' => $resultBlog->blogOwnEmail,
'verifyCode' => $verifyCode,
'sendTime' => time(),
];
$this->apiCustomBlogCheckSendEmail();
$returnData = [
'output' => 'Success',
'code' => 200,
'data' => [
'message' => '发送成功',
],
];
} else {
// 存在验证码,检查验证码是否需要重新发送
$data = DB::table('code')
->where([ ->where([
['email','=',$resultBlog->blogOwnEmail], ['email', '=', $resultBlog->blogOwnEmail],
['type','=','CODE-CUSTOM-CHECK'], ['type', '=', 'CODE-CUSTOM-CHECK'],
['time','>',time()]]) ['time', '>', time()]])
->get() ->get()
->toArray(); ->toArray();
$this->sendEmail = [ // 不存在验证码,生成验证码并存入数据库中
'userEmail' => $data[0]->email, if (empty($resultVerifyCode[0]->id)) {
'verifyCode' => $data[0]->code, // 生成6位数验证码
'sendTime' => time(), $verifyCode = null;
]; for ($i = 0; $i < 6; $i++)
if ($resultVerifyCode[0]->sendTime < time()-60) { $verifyCode .= rand(0, 9);
// 发送验证码
// 存入数据库
DB::table('code') DB::table('code')
->where([ ->insert([
['email','=',$resultBlog->blogOwnEmail], 'email' => $resultBlog->blogOwnEmail,
['type','=','CODE-CUSTOM-CHECK'], 'code' => $verifyCode,
['time','>',time()]]) 'type' => 'CODE-CUSTOM-CHECK',
->update(['sendTime' => time()]); 'sendTime' => time(),
'time' => time() + 900,
]);
// 数据整理
$this->sendEmail = [
'userEmail' => $resultBlog->blogOwnEmail,
'verifyCode' => $verifyCode,
'sendTime' => time(),
];
$this->apiCustomBlogCheckSendEmail(); $this->apiCustomBlogCheckSendEmail();
$returnData = [ $returnData = [
'output' => 'Success', 'output' => 'Success',
'code' => 200, 'code' => 200,
'data' => [ 'data' => [
'message' => '重新发送成功', 'message' => '发送成功',
], ],
]; ];
} else { } else {
// 避免重复发送 // 存在验证码,检查验证码是否需要重新发送
$returnData = [ $data = DB::table('code')
'output' => 'SendingTimeTooFast', ->where([
'code' => 403, ['email', '=', $resultBlog->blogOwnEmail],
'data' => [ ['type', '=', 'CODE-CUSTOM-CHECK'],
'message' => '邮件重新发送时间过快', ['time', '>', time()]])
'data' => [ ->get()
'time' => 60 - (time() - $resultVerifyCode[0]->sendTime), ->toArray();
], $this->sendEmail = [
], 'userEmail' => $data[0]->email,
'verifyCode' => $data[0]->code,
'sendTime' => time(),
]; ];
if ($resultVerifyCode[0]->sendTime < time() - 60) {
// 发送验证码
DB::table('code')
->where([
['email', '=', $resultBlog->blogOwnEmail],
['type', '=', 'CODE-CUSTOM-CHECK'],
['time', '>', time()]])
->update(['sendTime' => time()]);
$this->apiCustomBlogCheckSendEmail();
$returnData = [
'output' => 'Success',
'code' => 200,
'data' => [
'message' => '重新发送成功',
],
];
} else {
// 避免重复发送
$returnData = [
'output' => 'SendingTimeTooFast',
'code' => 403,
'data' => [
'message' => '邮件重新发送时间过快',
'data' => [
'time' => 60 - (time() - $resultVerifyCode[0]->sendTime),
],
],
];
}
} }
} else {
$returnData = [
'output' => 'EmailMismatch',
'code' => 403,
'data' => [
'message' => '邮箱与对应ID不匹配',
],
];
} }
} else { } else {
$returnData = [ $returnData = [
'output' => 'EmailMismatch', 'output' => 'NoEmail',
'code' => 403, 'code' => 403,
'data' => [ 'data' => [
'message' => '邮箱与对应ID不匹配', 'message' => '对应ID没有绑定邮箱请联系管理员',
], ],
]; ];
} }
} else { } else {
$returnData = [ $returnData = [
'output' => 'NoEmail', 'output' => 'NoBlog',
'code' => 403, 'code' => 403,
'data' => [ 'data' => [
'message' => '对应ID没有绑定邮箱请联系管理员', 'message' => '没有ID对应博客',
], ],
]; ];
} }
} else { } else {
$errorType = array_keys($dataCheck->failed());
$i = 0;
foreach ($dataCheck->failed() as $valueData) {
$errorInfo[$errorType[$i]] = array_keys($valueData);
if ($i == 0) {
$errorSingle = [
'info' => $errorType[$i],
'need' => $errorInfo[$errorType[$i]],
];
}
$i++;
}
$returnData = [ $returnData = [
'output' => 'NoBlog', 'output' => 'DataFormatError',
'code' => 403, 'code' => 403,
'data' => [ 'data' => [
'message' => '没有ID对应博客', 'message' => '输入内容有错误',
'errorSingle' => $errorSingle,
'error' => $errorInfo,
], ],
]; ];
} }