新增 ClientRepository 接口,用于管理客户端相关操作。 更新 Token 模型,加入版本号和过期时间字段,以提升令牌管理能力。 将 ClientRepo 集成到容器中,支持依赖注入。 重构 TokenService,采用 JWT 以增强安全性。 更新 Docker 配置,并清理多个文件中的空白字符。
41 lines
884 B
Go
41 lines
884 B
Go
package auth
|
||
|
||
import (
|
||
"carrotskin/pkg/config"
|
||
"fmt"
|
||
"sync"
|
||
)
|
||
|
||
var (
|
||
// jwtServiceInstance 全局JWT服务实例
|
||
jwtServiceInstance *JWTService
|
||
// once 确保只初始化一次
|
||
once sync.Once
|
||
// initError 初始化错误
|
||
)
|
||
|
||
// Init 初始化JWT服务(线程安全,只会执行一次)
|
||
func Init(cfg config.JWTConfig) error {
|
||
once.Do(func() {
|
||
jwtServiceInstance = NewJWTService(cfg.Secret, cfg.ExpireHours)
|
||
})
|
||
return nil
|
||
}
|
||
|
||
// GetJWTService 获取JWT服务实例(线程安全)
|
||
func GetJWTService() (*JWTService, error) {
|
||
if jwtServiceInstance == nil {
|
||
return nil, fmt.Errorf("JWT服务未初始化,请先调用 auth.Init()")
|
||
}
|
||
return jwtServiceInstance, nil
|
||
}
|
||
|
||
// MustGetJWTService 获取JWT服务实例,如果未初始化则panic
|
||
func MustGetJWTService() *JWTService {
|
||
service, err := GetJWTService()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return service
|
||
}
|