forked from yoone/API
1
0
Fork 0
API/src/service/authCode.service.ts

47 lines
1.2 KiB
TypeScript

import { Provide } from '@midwayjs/core';
import { InjectEntityModel } from '@midwayjs/typeorm';
import { Repository } from 'typeorm';
import { AuthCode } from '../entity/auth_code';
@Provide()
export class AuthCodeService {
@InjectEntityModel(AuthCode)
authCodeModel: Repository<AuthCode>;
private generateCodeNumber() {
return Math.floor(100000 + Math.random() * 900000).toString();
}
// 生成并保存验证码
async generateCode(deviceId: string): Promise<string> {
const code = this.generateCodeNumber();
const expiresAt = new Date(Date.now() + 10 * 60 * 1000); // 10分钟有效期
await this.authCodeModel.save({
device_id: deviceId,
code,
expires_at: expiresAt
});
return code;
}
// 校验验证码
async verifyCode(deviceId: string, code: string): Promise<boolean> {
const record = await this.authCodeModel.findOne({
where: { device_id: deviceId },
});
if (!record) return false;
if (record.expires_at.getTime() < Date.now()) {
await this.authCodeModel.delete({ device_id: deviceId });
return false;
}
if (record.code !== code) return false;
await this.authCodeModel.delete({ device_id: deviceId });
return true;
}
}