identifyUser 是核心构建块。传入一个 RequestLogger 和一个 Better Auth 会话,提取安全字段,并调用 log.set()。如果识别到了用户则返回 true,否则返回 false。
server/api/checkout.post.ts
import { identifyUser } from 'evlog/better-auth'
const session = await auth.api.getSession({ headers: event.headers })
if (session) {
const identified = identifyUser(log, session)
if (identified) {
log.set({ subscription: 'premium' })
}
}
默认安全。 只会提取白名单字段——密码、令牌和密钥绝不会写入日志记录器。
选项
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
maskEmail | boolean | false | 将电子邮件屏蔽为 h***@example.com。 |
session | boolean | true | 包含会话元数据(session.id、session.expiresAt、session.ipAddress、session.userAgent)。 |
fields | string[] | ['id', 'name', 'email', 'image', 'emailVerified', 'createdAt'] | 要提取的用户字段。 |
extend | (session) => Record<string, unknown> | undefined | 从 Better Auth 插件(组织、角色等)添加自定义字段。 |
server/api/checkout.post.ts
identifyUser(log, session, {
maskEmail: true,
fields: ['id', 'name'],
session: false,
})
屏蔽电子邮件
电子邮件属于 PII。在审计/日志轨迹可能会被支持人员或第三方查看的环境中,请将其屏蔽:
identifyUser(log, session, { maskEmail: true })
maskEmail 帮助函数也可单独导出:
import { maskEmail } from 'evlog/better-auth'
maskEmail('hugo@example.com') // 'h***@example.com'
捕获插件字段
Better Auth 附带插件(组织、2FA、角色、管理员),它们会向会话中添加字段。使用 extend 将它们展示到宽事件中:
server/middleware/auth-identify.ts
import { createAuthMiddleware } from 'evlog/better-auth'
const identify = createAuthMiddleware(auth, {
extend: (session) => ({
organization: session.user.activeOrganization,
role: session.user.role,
}),
})
包含插件字段的宽事件:
Wide Event
{
"userId": "QBX9tPjJQExWawAbNll75",
"user": { "id": "QBX9tPjJQExWawAbNll75", "name": "Hugo Richard" },
"organization": { "id": "org_42", "name": "Acme" },
"role": "admin"
}
保持
extend 的确定性——它会在每次请求时运行。避免在其中进行繁重计算或额外数据库调用;请查询 Better Auth 已经加载到会话中的数据。捕获的字段
| 字段 | 来源 | 描述 |
|---|---|---|
userId | session.user.id | 顶层用户 ID(PostHog 适配器将其用作 distinct_id)。 |
user.id | session.user.id | 用户 ID。 |
user.name | session.user.name | 显示名称。 |
user.email | session.user.email | 电子邮件(可通过 maskEmail: true 屏蔽)。 |
user.image | session.user.image | 头像 URL。 |
user.emailVerified | session.user.emailVerified | 电子邮件验证状态。 |
user.createdAt | session.user.createdAt | 账户创建日期(ISO 字符串)。 |
session.id | session.session.id | 会话 ID。 |
session.expiresAt | session.session.expiresAt | 会话过期时间(ISO 字符串)。 |
session.ipAddress | session.session.ipAddress | 来自会话的客户端 IP。 |
session.userAgent | session.session.userAgent | 来自会话的用户代理字符串。 |
session.createdAt | session.session.createdAt | 会话创建日期(ISO 字符串)。 |
auth.resolvedIn | Measured | 会话解析耗时,单位为 ms。 |
auth.identified | Computed | 请求是否已被识别。 |