45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
// 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(),
|
||
})
|
||
}
|