后端加入Redis、旋转图片验证接口
This commit is contained in:
36
Server/src/APIs/GetCaptcha.ts
Normal file
36
Server/src/APIs/GetCaptcha.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import fs from "fs";
|
||||
import { API } from "../Plugs/API/API";
|
||||
import ServerStdResponse from "../ServerStdResponse";
|
||||
import captchaSession from "../Plugs/Service/captchaSession";
|
||||
import path from "path";
|
||||
import sharp from "sharp";
|
||||
import crypto from 'crypto'
|
||||
|
||||
// 获取人机验证图片及标识符
|
||||
class GetCaptcha extends API {
|
||||
constructor() {
|
||||
super('GET', '/captcha');
|
||||
}
|
||||
|
||||
public async onRequset(data: any, res: any) {
|
||||
const imgsPath = path.join(__dirname, '../assets/captchaImgs');
|
||||
const fileList = fs.readdirSync(imgsPath)
|
||||
const imgPath = path.join(imgsPath, fileList[Math.floor(Math.random() * fileList.length)]);
|
||||
const rotateDeg = Math.floor(Math.random() * 240) + 60;
|
||||
const img = Buffer.from(await sharp(imgPath).rotate(-rotateDeg).toBuffer()).toString('base64')
|
||||
const session = crypto.createHash('md5').update(`${Math.random()} ${Date.now()}`).digest('hex');
|
||||
if (await captchaSession.add(session, rotateDeg)) {
|
||||
return res.json({
|
||||
...ServerStdResponse.OK, data: {
|
||||
img: img,
|
||||
session: session,
|
||||
imgPreStr: 'data:image/jpeg;base64,'
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return res.json(ServerStdResponse.SERVER_ERROR)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default GetCaptcha;
|
||||
Reference in New Issue
Block a user