Files
asd-backend/docs/AUDIT-FIX-REPORT.md

3.5 KiB
Raw Blame History

代码审计与修复报告

日期: 2026-06-02 范围: 后端(Rust) + 前端(WeChat Mini Program/TypeScript)


后端修复

1. refresh_tokens 表无限增长

问题: cleanup_expired_refresh_tokens() 函数已定义但从未被调用,已过期的 refresh token 不会自动清理。

修复: 在已有的每隔 5 分钟的后台定时任务中添加:

let _ = db::cleanup_expired_refresh_tokens(&pool_clone).await;

该任务同时处理:待支付订单重试 → 会员到期提醒 → refresh_token 清理。

2. urlencoding() 死代码

问题: 自定义 URL 编码函数从未被使用(支付宝签名用表单自动提交,不需要手工 URL 编码)。

修复: 删除 fn urlencoding() 及关联代码。

3. PackageInfo.original_amount 死代码

问题: 套餐结构体中的 original_amount 字段从未在 HTML 模板中引用(原价直接在 HTML 中硬编码)。

修复: 删除该字段及所有赋值。

4. chrono::Utc 未使用导入

修复: 删除 notifications.rs 中未使用的 use chrono::Utc


前端修复

5. flushOnUnload 导入未使用

问题: app.ts 导入 flushOnUnload 但从未在代码中调用。

修复: 从 import 语句中删除。

6. APP_VERSION 导入未使用

问题: sentryReporter.ts 导入 APP_VERSION 但未使用。

修复: 从 import 语句中删除。

7. ContactCallbackResult 类型不存在

问题: index.ts 使用了 WechatMiniprogram.ContactCallbackResult,该类型在当前微信基础库版本中不存在(正确类型为 ContextCallbackResult)。

修复: 改为 ContextCallbackResult

8. Error 类型不匹配

问题: app.ts:67wx.onError 回调参数被推断为 Error 类型,但 handleOnError 接受 string

修复: 显式声明回调参数类型为 string

9. renderMarkdown() 死代码

问题: notifications.ts 中的 renderMarkdown() 函数从未被调用WXML 使用 <text> 而非 <rich-text>)。

修复: 未删除(可能后续会用),添加注释说明。


日志系统优化

10. LogManager 写入错误详情

改前: wx.onError 只记录调用名,不记录实际错误信息。

改后: handleOnError/handleUnhandledRejection/handlePageNotFound 中同步写入 wx.getLogManager().warn(),错误详情可在导出的日志文件中查看。

11. 统一输出通道

改前: Logger.error 只输出到 console。

改后: ERROR/WARN 级别同步写入 console + LogManagerDEBUG 级别写入 LogManager.debug。


剩余问题(轻微,不影响功能)

文件 问题 影响
src/config.rs database_url(), rust_log(), is_production() 未使用
src/error.rs success(), to_json_response(), to_error_response() 未使用
src/models.rs AppStatealipay_* 字段冗余
src/rate_limiter.rs extract_client_ip_from_header() 未使用
src/db.rs verify_refresh_token, delete_refresh_token 未使用
src/auth.rs verify_refresh_token 未使用
src/handlers/sentry.rs level, stack 字段未读取

这些是扩展性预留代码,现有业务路径不受影响。


编译状态

模块 状态
后端 cargo check 0 errors, 12 warnings均为死代码
前端 npx tsc --noEmit 0 errors仅预存的 sentryReporter 类型问题)