fix(orm): 设置MySQL连接的最大空闲时间和生命周期
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m34s

feat(middleware): 区分Redis中session不存在的错误情况

在MySQL连接配置中添加SetConnMaxIdleTime和SetConnMaxLifetime设置
在认证中间件中区分Redis返回的key不存在错误和其他错误
This commit is contained in:
shanshanzhong 2025-12-17 18:16:55 -08:00
parent d3541a89ae
commit 041417a177
2 changed files with 8 additions and 1 deletions

View File

@ -17,6 +17,7 @@ import (
"github.com/perfect-panel/server/pkg/tool" "github.com/perfect-panel/server/pkg/tool"
"github.com/perfect-panel/server/pkg/xerr" "github.com/perfect-panel/server/pkg/xerr"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/redis/go-redis/v9"
) )
func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) { func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
@ -53,7 +54,11 @@ func AuthMiddleware(svc *svc.ServiceContext) func(c *gin.Context) {
sessionIdCacheKey := fmt.Sprintf("%v:%v", config.SessionIdKey, sessionId) sessionIdCacheKey := fmt.Sprintf("%v:%v", config.SessionIdKey, sessionId)
value, err := svc.Redis.Get(c, sessionIdCacheKey).Result() value, err := svc.Redis.Get(c, sessionIdCacheKey).Result()
if err != nil { if err != nil {
if errors.Is(err, redis.Nil) {
logger.WithContext(c.Request.Context()).Infow("[AuthMiddleware] session not found", logger.Field("sessionId", sessionId))
} else {
logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] redis get failed", logger.Field("error", err.Error()), logger.Field("sessionId", sessionId)) logger.WithContext(c.Request.Context()).Errorw("[AuthMiddleware] redis get failed", logger.Field("error", err.Error()), logger.Field("sessionId", sessionId))
}
result.HttpResult(c, nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access")) result.HttpResult(c, nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access"))
c.Abort() c.Abort()
return return

View File

@ -57,6 +57,8 @@ func ConnectMysql(m Mysql) (*gorm.DB, error) {
sqldb, _ := db.DB() sqldb, _ := db.DB()
sqldb.SetMaxIdleConns(m.Config.MaxIdleConns) sqldb.SetMaxIdleConns(m.Config.MaxIdleConns)
sqldb.SetMaxOpenConns(m.Config.MaxOpenConns) sqldb.SetMaxOpenConns(m.Config.MaxOpenConns)
sqldb.SetConnMaxIdleTime(5 * time.Minute)
sqldb.SetConnMaxLifetime(30 * time.Minute)
return db, nil return db, nil
} }
} }