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; private generateCodeNumber() { return Math.floor(100000 + Math.random() * 900000).toString(); } // 生成并保存验证码 async generateCode(deviceId: string): Promise { 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 { 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; } }