package auth import ( "context" "fmt" g "platform/web/globals" m "platform/web/models" q "platform/web/queries" "time" "gorm.io/gen/field" ) func FindSession(accessToken string, now time.Time) (*m.Session, error) { return q.Session. Preload(field.Associations). Where( q.Session.AccessToken.Eq(accessToken), q.Session.AccessTokenExpires.Gt(now), ).First() } func FindSessionByRefresh(refreshToken string, now time.Time) (*m.Session, error) { return q.Session. Preload(field.Associations). Where( q.Session.RefreshToken.Eq(refreshToken), q.Session.RefreshTokenExpires.Gt(now), ).First() } func SaveSession(session *m.Session) error { return q.Session.Save(session) } func RemoveSession(ctx context.Context, accessToken string, refreshToken string) error { g.Redis.Del(ctx, accessKey(accessToken), refreshKey(refreshToken)) return nil } // 令牌键的格式为 "session:" func accessKey(token string) string { return fmt.Sprintf("session:%s", token) } // 刷新令牌键的格式为 "session:refreshKey:" func refreshKey(token string) string { return fmt.Sprintf("session:refresh:%s", token) }