mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-10-27 05:52:29 +08:00
fix: kick token
This commit is contained in:
parent
606a3b3e4f
commit
79972e6c14
@ -46,6 +46,7 @@ type authServer struct {
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
RpcConfig config.Auth
|
RpcConfig config.Auth
|
||||||
|
MsgGatewayConfig config.MsgGateway
|
||||||
RedisConfig config.Redis
|
RedisConfig config.Redis
|
||||||
Share config.Share
|
Share config.Share
|
||||||
Discovery config.Discovery
|
Discovery config.Discovery
|
||||||
@ -64,6 +65,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg
|
|||||||
redis2.NewTokenCacheModel(rdb, config.RpcConfig.TokenPolicy.Expire),
|
redis2.NewTokenCacheModel(rdb, config.RpcConfig.TokenPolicy.Expire),
|
||||||
config.Share.Secret,
|
config.Share.Secret,
|
||||||
config.RpcConfig.TokenPolicy.Expire,
|
config.RpcConfig.TokenPolicy.Expire,
|
||||||
|
config.MsgGatewayConfig.MultiLoginPolicy,
|
||||||
),
|
),
|
||||||
config: config,
|
config: config,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -36,6 +36,7 @@ func NewAuthRpcCmd() *AuthRpcCmd {
|
|||||||
ret := &AuthRpcCmd{authConfig: &authConfig}
|
ret := &AuthRpcCmd{authConfig: &authConfig}
|
||||||
ret.configMap = map[string]any{
|
ret.configMap = map[string]any{
|
||||||
OpenIMRPCAuthCfgFileName: &authConfig.RpcConfig,
|
OpenIMRPCAuthCfgFileName: &authConfig.RpcConfig,
|
||||||
|
OpenIMMsgGatewayCfgFileName: &authConfig.MsgGatewayConfig,
|
||||||
RedisConfigFileName: &authConfig.RedisConfig,
|
RedisConfigFileName: &authConfig.RedisConfig,
|
||||||
ShareFileName: &authConfig.Share,
|
ShareFileName: &authConfig.Share,
|
||||||
DiscoveryConfigFilename: &authConfig.Discovery,
|
DiscoveryConfigFilename: &authConfig.Discovery,
|
||||||
|
|||||||
@ -38,10 +38,11 @@ type authDatabase struct {
|
|||||||
cache cache.TokenModel
|
cache cache.TokenModel
|
||||||
accessSecret string
|
accessSecret string
|
||||||
accessExpire int64
|
accessExpire int64
|
||||||
|
multiLoginPolicy int
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAuthDatabase(cache cache.TokenModel, accessSecret string, accessExpire int64) AuthDatabase {
|
func NewAuthDatabase(cache cache.TokenModel, accessSecret string, accessExpire int64, policy int) AuthDatabase {
|
||||||
return &authDatabase{cache: cache, accessSecret: accessSecret, accessExpire: accessExpire}
|
return &authDatabase{cache: cache, accessSecret: accessSecret, accessExpire: accessExpire, multiLoginPolicy: policy}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the result is empty.
|
// If the result is empty.
|
||||||
@ -55,6 +56,7 @@ func (a *authDatabase) SetTokenMapByUidPid(ctx context.Context, userID string, p
|
|||||||
|
|
||||||
// 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) {
|
||||||
|
// todo: get all platform token
|
||||||
tokens, err := a.cache.GetTokensWithoutError(ctx, userID, platformID)
|
tokens, err := a.cache.GetTokensWithoutError(ctx, userID, platformID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@ -65,7 +67,7 @@ func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformI
|
|||||||
t, err := tokenverify.GetClaimFromToken(k, authverify.Secret(a.accessSecret))
|
t, err := tokenverify.GetClaimFromToken(k, authverify.Secret(a.accessSecret))
|
||||||
if err != nil || v != constant.NormalToken {
|
if err != nil || v != constant.NormalToken {
|
||||||
deleteTokenKey = append(deleteTokenKey, k)
|
deleteTokenKey = append(deleteTokenKey, k)
|
||||||
} else if t.UserID == userID && t.PlatformID == platformID {
|
} else if a.checkKickToken(ctx, platformID, t) {
|
||||||
kickedTokenKey = append(kickedTokenKey, k)
|
kickedTokenKey = append(kickedTokenKey, k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,3 +98,23 @@ func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformI
|
|||||||
}
|
}
|
||||||
return tokenString, nil
|
return tokenString, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *authDatabase) checkKickToken(ctx context.Context, platformID int, token *tokenverify.Claims) bool {
|
||||||
|
switch a.multiLoginPolicy {
|
||||||
|
case constant.DefalutNotKick:
|
||||||
|
return false
|
||||||
|
case constant.PCAndOther:
|
||||||
|
if constant.PlatformIDToClass(platformID) == constant.TerminalPC ||
|
||||||
|
constant.PlatformIDToClass(token.PlatformID) == constant.TerminalPC {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
case constant.AllLoginButSameTermKick:
|
||||||
|
if platformID == token.PlatformID {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user