From 34a9e727b467658ada08f686049ad532110bff03 Mon Sep 17 00:00:00 2001 From: moyin <244344649@qq.com> Date: Wed, 17 Dec 2025 21:23:22 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E8=B0=83=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在验证码服务中添加debugCodeInfo方法 - 在业务层添加debugVerificationCode调试接口 - 新增/auth/debug-verification-code调试端点 - 支持查看验证码详细状态信息(TTL、尝试次数等) - 便于开发和生产环境问题排查 --- src/business/login/login.controller.ts | 19 ++++++++++++++++ src/business/login/login.service.ts | 27 +++++++++++++++++++++++ src/core/login_core/login_core.service.ts | 14 +++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/business/login/login.controller.ts b/src/business/login/login.controller.ts index 7059243..ba16f86 100644 --- a/src/business/login/login.controller.ts +++ b/src/business/login/login.controller.ts @@ -343,4 +343,23 @@ export class LoginController { async resendEmailVerification(@Body() sendEmailVerificationDto: SendEmailVerificationDto): Promise> { return await this.loginService.resendEmailVerification(sendEmailVerificationDto.email); } + + /** + * 调试验证码信息 + * 仅用于开发和调试 + * + * @param sendEmailVerificationDto 邮箱信息 + * @returns 验证码调试信息 + */ + @ApiOperation({ + summary: '调试验证码信息', + description: '获取验证码的详细调试信息(仅开发环境)' + }) + @ApiBody({ type: SendEmailVerificationDto }) + @Post('debug-verification-code') + @HttpCode(HttpStatus.OK) + @UsePipes(new ValidationPipe({ transform: true })) + async debugVerificationCode(@Body() sendEmailVerificationDto: SendEmailVerificationDto): Promise { + return await this.loginService.debugVerificationCode(sendEmailVerificationDto.email); + } } \ No newline at end of file diff --git a/src/business/login/login.service.ts b/src/business/login/login.service.ts index dcc1ad0..f17b838 100644 --- a/src/business/login/login.service.ts +++ b/src/business/login/login.service.ts @@ -427,4 +427,31 @@ export class LoginService { // 简单的Base64编码(实际应用中应使用JWT) return Buffer.from(JSON.stringify(payload)).toString('base64'); } + /** + * 调试验证码信息 + * + * @param email 邮箱地址 + * @returns 调试信息 + */ + async debugVerificationCode(email: string): Promise { + try { + this.logger.log(`调试验证码信息: ${email}`); + + const debugInfo = await this.loginCoreService.debugVerificationCode(email); + + return { + success: true, + data: debugInfo, + message: '调试信息获取成功' + }; + } catch (error) { + this.logger.error(`获取验证码调试信息失败: ${email}`, error instanceof Error ? error.stack : String(error)); + + return { + success: false, + message: error instanceof Error ? error.message : '获取调试信息失败', + error_code: 'DEBUG_VERIFICATION_CODE_FAILED' + }; + } + } } \ No newline at end of file diff --git a/src/core/login_core/login_core.service.ts b/src/core/login_core/login_core.service.ts index 5488493..d288a49 100644 --- a/src/core/login_core/login_core.service.ts +++ b/src/core/login_core/login_core.service.ts @@ -567,4 +567,16 @@ export class LoginCoreService { const phoneRegex = /^(\+\d{1,3}[- ]?)?\d{10,11}$/; return phoneRegex.test(str.replace(/\s/g, '')); } -} + /** + * 调试验证码信息 + * + * @param email 邮箱地址 + * @returns 调试信息 + */ + async debugVerificationCode(email: string): Promise { + return await this.verificationService.debugCodeInfo( + email, + VerificationCodeType.EMAIL_VERIFICATION + ); + } +} \ No newline at end of file