mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-06 04:15:46 +08:00
multi terminal kick eachOther
This commit is contained in:
parent
64e71440e2
commit
5dcb7f2a80
@ -110,7 +110,7 @@ func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int32, newCo
|
|||||||
m[k] = constant.KickedToken
|
m[k] = constant.KickedToken
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = db.DB.SetTokenMapByUidPid(uid, utils.Int32ToString(platformID), m)
|
err = db.DB.SetTokenMapByUidPid(uid, platformID, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError("", "SetTokenMapByUidPid err", err.Error())
|
log.NewError("", "SetTokenMapByUidPid err", err.Error())
|
||||||
return
|
return
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
log2 "Open_IM/pkg/common/log"
|
log2 "Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"github.com/garyburd/redigo/redis"
|
"github.com/garyburd/redigo/redis"
|
||||||
@ -75,26 +76,39 @@ func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) {
|
|||||||
|
|
||||||
//Store userid and platform class to redis
|
//Store userid and platform class to redis
|
||||||
func (d *DataBases) AddTokenFlag(userID string, platformID int32, token string, flag int) error {
|
func (d *DataBases) AddTokenFlag(userID string, platformID int32, token string, flag int) error {
|
||||||
key := uidPidToken + userID + ":" + utils.Int32ToString(platformID)
|
key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID)
|
||||||
m, err := redis.IntMap(d.Exec("GET", key))
|
var m map[string]int
|
||||||
|
m = make(map[string]int)
|
||||||
|
ls, err := redis.String(d.Exec("GET", key))
|
||||||
if err != nil && err != redis.ErrNil {
|
if err != nil && err != redis.ErrNil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err == redis.ErrNil {
|
if err == redis.ErrNil {
|
||||||
m = make(map[string]int, 5)
|
} else {
|
||||||
|
_ = utils.JsonStringToStruct(ls, &m)
|
||||||
}
|
}
|
||||||
m[token] = flag
|
m[token] = flag
|
||||||
_, err1 := d.Exec("SET", key, m)
|
s := utils.StructToJsonString(m)
|
||||||
|
_, err1 := d.Exec("SET", key, s)
|
||||||
return err1
|
return err1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) {
|
func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (m map[string]int, e error) {
|
||||||
key := uidPidToken + userID + ":" + platformID
|
key := uidPidToken + userID + ":" + platformID
|
||||||
return redis.IntMap(d.Exec("GET", key))
|
log2.NewDebug("", "key is ", key)
|
||||||
|
s, e := redis.String(d.Exec("GET", key))
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
} else {
|
||||||
|
m = make(map[string]int)
|
||||||
|
_ = utils.JsonStringToStruct(s, m)
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func (d *DataBases) SetTokenMapByUidPid(userID, platformID string, m map[string]int) error {
|
func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int32, m map[string]int) error {
|
||||||
key := uidPidToken + userID + ":" + platformID
|
key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID)
|
||||||
_, err := d.Exec("SET", key, m)
|
s := utils.StructToJsonString(m)
|
||||||
|
_, err := d.Exec("SET", key, s)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ func getClaimFromToken(tokensString string) (*Claims, error) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if claims, ok := token.Claims.(*Claims); ok && token.Valid {
|
if claims, ok := token.Claims.(*Claims); ok && token.Valid {
|
||||||
|
log.NewDebug("", claims.UID, claims.Platform)
|
||||||
return claims, nil
|
return claims, nil
|
||||||
}
|
}
|
||||||
return nil, &constant.ErrTokenNotValidYet
|
return nil, &constant.ErrTokenNotValidYet
|
||||||
@ -80,13 +81,13 @@ func getClaimFromToken(tokensString string) (*Claims, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ParseToken(tokensString string) (claims *Claims, err error) {
|
func ParseToken(tokensString string) (claims *Claims, err error) {
|
||||||
//根据token的算法本身做出的有效性检验
|
|
||||||
claims, err = getClaimFromToken(tokensString)
|
claims, err = getClaimFromToken(tokensString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError("", "token validate err", err.Error())
|
log.NewError("", "token validate err", err.Error())
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
//根据redis做出的有效性检验
|
|
||||||
m, err := commonDB.DB.GetTokenMapByUidPid(claims.UID, claims.Platform)
|
m, err := commonDB.DB.GetTokenMapByUidPid(claims.UID, claims.Platform)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError("", "get token from redis err", err.Error())
|
log.NewError("", "get token from redis err", err.Error())
|
||||||
@ -99,6 +100,7 @@ func ParseToken(tokensString string) (claims *Claims, err error) {
|
|||||||
if v, ok := m[tokensString]; ok {
|
if v, ok := m[tokensString]; ok {
|
||||||
switch v {
|
switch v {
|
||||||
case constant.NormalToken:
|
case constant.NormalToken:
|
||||||
|
log.NewDebug("", "this is normal return", claims)
|
||||||
return claims, nil
|
return claims, nil
|
||||||
case constant.InValidToken:
|
case constant.InValidToken:
|
||||||
return nil, &constant.ErrTokenInvalid
|
return nil, &constant.ErrTokenInvalid
|
||||||
@ -140,5 +142,6 @@ func VerifyToken(token, uid string) (bool, error) {
|
|||||||
if claims.UID != uid {
|
if claims.UID != uid {
|
||||||
return false, &constant.ErrTokenUnknown
|
return false, &constant.ErrTokenUnknown
|
||||||
}
|
}
|
||||||
|
log.NewDebug("", claims.UID, claims.Platform)
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user