// Package auth 实现 user-service 的认证、三方登录、密码登录和 refresh session 用例。 package auth import ( "context" "hyapp/pkg/appcode" authdomain "hyapp/services/user-service/internal/domain/auth" ) // Meta 是 gateway 透传到 user-service 的审计元信息。 type Meta struct { // AppCode 是 gateway 已解析的 App 租户键。 AppCode string // RequestID 是 gateway 透传的请求 ID,用于登录审计。 RequestID string // ClientIP 是客户端 IP。 ClientIP string // UserAgent 是客户端 UA。 UserAgent string // CountryByIP 是 gateway 或可信边缘层根据入口 IP 得到的国家快照。 CountryByIP string } func (s *Service) audit(ctx context.Context, meta Meta, userID int64, loginType string, provider string, result string, failureCode string) { if s.authRepository == nil { // 没有 repository 时无法写审计,但不应让辅助审计路径触发 panic。 return } // 审计失败不影响登录主链路,所以这里有意忽略错误。 _ = s.authRepository.RecordLoginAudit(ctx, authdomain.LoginAudit{ AppCode: appcode.Normalize(meta.AppCode), RequestID: meta.RequestID, UserID: userID, LoginType: loginType, Provider: provider, Result: result, FailureCode: failureCode, ClientIP: meta.ClientIP, UserAgent: meta.UserAgent, CreatedAtMs: s.now().UnixMilli(), }) }