refactor: Remove Token management and integrate Redis for authentication
- Deleted the Token model and its repository, transitioning to a Redis-based token management system. - Updated the service layer to utilize Redis for token storage, enhancing performance and scalability. - Refactored the container to remove TokenRepository and integrate the new token service. - Cleaned up the Dockerfile and other files by removing unnecessary whitespace and comments. - Enhanced error handling and logging for Redis initialization and usage.
This commit is contained in:
@@ -29,7 +29,6 @@ type Container struct {
|
||||
UserRepo repository.UserRepository
|
||||
ProfileRepo repository.ProfileRepository
|
||||
TextureRepo repository.TextureRepository
|
||||
TokenRepo repository.TokenRepository
|
||||
ClientRepo repository.ClientRepository
|
||||
ConfigRepo repository.SystemConfigRepository
|
||||
YggdrasilRepo repository.YggdrasilRepository
|
||||
@@ -61,6 +60,14 @@ func NewContainer(
|
||||
Prefix: "carrotskin:",
|
||||
Expiration: 5 * time.Minute,
|
||||
Enabled: true,
|
||||
Policy: database.CachePolicy{
|
||||
UserTTL: 5 * time.Minute,
|
||||
UserEmailTTL: 5 * time.Minute,
|
||||
ProfileTTL: 5 * time.Minute,
|
||||
ProfileListTTL: 3 * time.Minute,
|
||||
TextureTTL: 5 * time.Minute,
|
||||
TextureListTTL: 2 * time.Minute,
|
||||
},
|
||||
})
|
||||
|
||||
c := &Container{
|
||||
@@ -76,7 +83,6 @@ func NewContainer(
|
||||
c.UserRepo = repository.NewUserRepository(db)
|
||||
c.ProfileRepo = repository.NewProfileRepository(db)
|
||||
c.TextureRepo = repository.NewTextureRepository(db)
|
||||
c.TokenRepo = repository.NewTokenRepository(db)
|
||||
c.ClientRepo = repository.NewClientRepository(db)
|
||||
c.ConfigRepo = repository.NewSystemConfigRepository(db)
|
||||
c.YggdrasilRepo = repository.NewYggdrasilRepository(db)
|
||||
@@ -98,10 +104,24 @@ func NewContainer(
|
||||
logger.Fatal("获取Yggdrasil私钥失败", zap.Error(err))
|
||||
}
|
||||
yggdrasilJWT := auth.NewYggdrasilJWTService(privateKey, "carrotskin")
|
||||
c.TokenService = service.NewTokenServiceJWT(c.TokenRepo, c.ClientRepo, c.ProfileRepo, yggdrasilJWT, logger)
|
||||
|
||||
// 创建Redis Token存储(必须使用Redis,包括miniredis回退)
|
||||
if redisClient == nil {
|
||||
logger.Fatal("Redis客户端未初始化,无法创建Token服务")
|
||||
}
|
||||
|
||||
tokenStore := auth.NewTokenStoreRedis(
|
||||
redisClient,
|
||||
logger,
|
||||
auth.WithKeyPrefix("token:"),
|
||||
auth.WithDefaultTTL(24*time.Hour),
|
||||
auth.WithStaleTTL(30*24*time.Hour),
|
||||
auth.WithMaxTokensPerUser(10),
|
||||
)
|
||||
c.TokenService = service.NewTokenServiceRedis(tokenStore, c.ClientRepo, c.ProfileRepo, yggdrasilJWT, logger)
|
||||
|
||||
// 使用组合服务(内部包含认证、会话、序列化、证书服务)
|
||||
c.YggdrasilService = service.NewYggdrasilServiceComposite(db, c.UserRepo, c.ProfileRepo, c.TokenRepo, c.YggdrasilRepo, c.SignatureService, redisClient, logger)
|
||||
c.YggdrasilService = service.NewYggdrasilServiceComposite(db, c.UserRepo, c.ProfileRepo, c.YggdrasilRepo, c.SignatureService, redisClient, logger, c.TokenService)
|
||||
|
||||
// 初始化其他服务
|
||||
c.SecurityService = service.NewSecurityService(redisClient)
|
||||
@@ -186,13 +206,6 @@ func WithTextureRepo(repo repository.TextureRepository) Option {
|
||||
}
|
||||
}
|
||||
|
||||
// WithTokenRepo 设置令牌仓储
|
||||
func WithTokenRepo(repo repository.TokenRepository) Option {
|
||||
return func(c *Container) {
|
||||
c.TokenRepo = repo
|
||||
}
|
||||
}
|
||||
|
||||
// WithConfigRepo 设置系统配置仓储
|
||||
func WithConfigRepo(repo repository.SystemConfigRepository) Option {
|
||||
return func(c *Container) {
|
||||
|
||||
Reference in New Issue
Block a user