diff --git a/apps/backend/src/repositories/worker-platform/worker-risk-repo.ts b/apps/backend/src/repositories/worker-platform/worker-risk-repo.ts index 83d6e566..97fb8572 100644 --- a/apps/backend/src/repositories/worker-platform/worker-risk-repo.ts +++ b/apps/backend/src/repositories/worker-platform/worker-risk-repo.ts @@ -50,7 +50,13 @@ export type InsertWorkerRiskEventInput = { detail?: Record } -/** 写入一条风控事件。账号名用子查询就地补全,避免调用方多发一次查询。 */ +/** + * 写入一条风控事件。账号名用子查询就地补全,避免调用方多发一次查询。 + * + * worker_id 同样用子查询解析,**查不到就写 NULL**:外挂可以伪造 token 里的 uid, + * 那种 uid 在 worker_users 里并不存在。若直接写该值会触发外键约束失败, + * 导致「最该留痕的伪造流量反而记不下来」。target_key 仍保留原始 uid,追溯不受影响。 + */ export async function insertWorkerRiskEvent(input: InsertWorkerRiskEventInput): Promise { await query( ` @@ -59,7 +65,8 @@ export async function insertWorkerRiskEvent(input: InsertWorkerRiskEventInput): violation_count, window_count, penalty_until, action, actor_user_id, actor_username, reason, detail_json, created_at ) VALUES ( - $1, $2, $3, + $1, $2, + (SELECT id FROM worker_users WHERE id = $3), COALESCE((SELECT username FROM worker_users WHERE id = $3), ''), $4, $5, $6, $7, $8, $9, $10, $11, $12::jsonb, NOW() )