feat: record daily login tracking on auth success

This commit is contained in:
2026-05-08 14:00:04 +08:00
parent 98be6eb0e4
commit f343555a19
6 changed files with 146 additions and 2 deletions

View File

@@ -0,0 +1,63 @@
# 登录成功每日登录埋点闭环方案2026-05-08
## 背景
后台“埋点数据”需要能看到真实登录触发的 `daily_login` 埋点。此前方案 A 已把“读取任务中心时顺手写每日登录埋点”拆成独立 SpacetimeDB procedure
- `record_daily_login_tracking_event_and_return`
- `spacetime-client` 方法:`record_daily_login_tracking_event(user_id)`
但认证成功链路还没有调用该方法,因此当前只完成了“任务中心读取不污染登录埋点”,没有完成“用户真实登录写入每日登录埋点”。
## 目标
在用户认证成功并创建 refresh session / access token 后,异步尝试写入每日登录埋点。
覆盖入口:
- 手机验证码登录:`POST /api/auth/phone/login`
- 密码入口登录:`POST /api/auth/entry`
- 重置密码后自动登录:`POST /api/auth/password/reset`
- 微信 OAuth callback 登录:`GET /api/auth/wechat/callback`
- 微信绑定手机号后激活/登录态刷新:`POST /api/auth/wechat/bind-phone`
## 设计约束
1. 埋点写入不能阻断登录成功响应。
2. 只有认证成功并已创建会话后才记录。
3. 失败只记 warning继续返回 token / cookie。
4. 写入统一收口,避免多个登录 handler 各自拼 procedure 调用。
5. 不修改 SpacetimeDB 表结构,不需要更新 `migration.rs`
## 实现方案
新增 `api-server` 内部 helper
```rust
record_daily_login_tracking_event_after_auth_success(
state: &AppState,
request_context: &RequestContext,
user_id: &str,
login_method: AuthLoginMethod,
).await;
```
该 helper
- 调用 `state.spacetime_client().record_daily_login_tracking_event(user_id.to_string()).await`
- 成功时记录 info
- 失败时记录 warn并明确“登录流程继续”
在各登录入口 `create_auth_session` 成功后调用该 helper。
## 验收
- `cargo test -p api-server auth_session -- --nocapture`
- `cargo check -p api-server`
- `cargo check -p spacetime-client`
- `npm run check:encoding`
- `git diff --check`
## 注意
`npm run dev` 是长期运行进程;如需本地 smoke应启动后用 `/healthz` 和后台页面验证,不要等待该命令退出。