fix: AdminToken save to redis && limit 1 for each userID (#3224)

This commit is contained in:
icey-yu 2025-03-13 17:17:50 +08:00 committed by OpenIM-Robot
parent 0748b9ad1b
commit 41fea707da
2 changed files with 17 additions and 28 deletions

View File

@ -85,32 +85,28 @@ func (a *authDatabase) BatchSetTokenMapByUidPid(ctx context.Context, tokens []st
// Create Token. // Create Token.
func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformID int) (string, error) { func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformID int) (string, error) {
isAdmin := authverify.IsManagerUserID(userID, a.adminUserIDs) tokens, err := a.cache.GetAllTokensWithoutError(ctx, userID)
if !isAdmin { if err != nil {
tokens, err := a.cache.GetAllTokensWithoutError(ctx, userID) return "", err
if err != nil { }
return "", err
}
deleteTokenKey, kickedTokenKey, adminTokens, err := a.checkToken(ctx, tokens, platformID) deleteTokenKey, kickedTokenKey, err := a.checkToken(ctx, tokens, platformID)
if err != nil { if err != nil {
return "", err return "", err
} }
if len(deleteTokenKey) != 0 { if len(deleteTokenKey) != 0 {
err = a.cache.DeleteTokenByTokenMap(ctx, userID, deleteTokenKey) err = a.cache.DeleteTokenByUidPid(ctx, userID, platformID, deleteTokenKey)
if err != nil { if err != nil {
return "", err return "", err
} }
} }
if len(kickedTokenKey) != 0 { if len(kickedTokenKey) != 0 {
for plt, ks := range kickedTokenKey { for _, k := range kickedTokenKey {
for _, k := range ks { err := a.cache.SetTokenFlagEx(ctx, userID, platformID, k, constant.KickedToken)
err := a.cache.SetTokenFlagEx(ctx, userID, plt, k, constant.KickedToken) if err != nil {
if err != nil { return "", err
return "", err
}
log.ZDebug(ctx, "kicked token in create token", "token", k)
} }
log.ZDebug(ctx, "kicked token in create token", "token", k)
} }
} }
if len(adminTokens) != 0 { if len(adminTokens) != 0 {
@ -126,10 +122,8 @@ func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformI
return "", errs.WrapMsg(err, "token.SignedString") return "", errs.WrapMsg(err, "token.SignedString")
} }
if !isAdmin { if err = a.cache.SetTokenFlagEx(ctx, userID, platformID, tokenString, constant.NormalToken); err != nil {
if err = a.cache.SetTokenFlagEx(ctx, userID, platformID, tokenString, constant.NormalToken); err != nil { return "", err
return "", err
}
} }
return tokenString, nil return tokenString, nil
@ -241,9 +235,6 @@ func (a *authDatabase) checkToken(ctx context.Context, tokens map[int]map[string
} }
//var adminTokenMaxNum = a.multiLogin.MaxNumOneEnd //var adminTokenMaxNum = a.multiLogin.MaxNumOneEnd
//if a.multiLogin.Policy == constant.Customize {
// adminTokenMaxNum = a.multiLogin.CustomizeLoginNum[constant.AdminPlatformID]
//}
//l := len(adminToken) //l := len(adminToken)
//if platformID == constant.AdminPlatformID { //if platformID == constant.AdminPlatformID {
// l++ // l++
@ -251,9 +242,8 @@ func (a *authDatabase) checkToken(ctx context.Context, tokens map[int]map[string
//if l > adminTokenMaxNum { //if l > adminTokenMaxNum {
// kickToken = append(kickToken, adminToken[:l-adminTokenMaxNum]...) // kickToken = append(kickToken, adminToken[:l-adminTokenMaxNum]...)
//} //}
var deleteAdminToken []string
if platformID == constant.AdminPlatformID { if platformID == constant.AdminPlatformID {
deleteAdminToken = adminToken kickToken = append(kickToken, adminToken...)
} }
return deleteToken, kickToken, deleteAdminToken, nil return deleteToken, kickToken, nil
} }

View File

@ -21,12 +21,11 @@ import (
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database" "github.com/openimsdk/open-im-server/v3/pkg/common/storage/database"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model" "github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
"github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/constant"
"github.com/openimsdk/protocol/user"
"github.com/openimsdk/tools/db/pagination" "github.com/openimsdk/tools/db/pagination"
"github.com/openimsdk/tools/db/tx" "github.com/openimsdk/tools/db/tx"
"github.com/openimsdk/tools/utils/datautil"
"github.com/openimsdk/protocol/user"
"github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/errs"
"github.com/openimsdk/tools/utils/datautil"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/cache" "github.com/openimsdk/open-im-server/v3/pkg/common/storage/cache"
) )