multi terminal kick eachOther

pull/103/head
Gordon 3 years ago
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…
Cancel
Save