세션 중복 로그인 금지
This commit is contained in:
@ -42,16 +42,42 @@ func newProviderWithRedis(ctx context.Context, redisUrl string, ttl time.Duratio
|
||||
}
|
||||
|
||||
func (p *provider_redis) New(input *Authorization) (string, error) {
|
||||
sk := make_storagekey(input.Account)
|
||||
_, err := p.redisClient.HSet(p.ctx, string(sk), input.ToStrings()).Result()
|
||||
newsk := make_storagekey(input.Account)
|
||||
prefix := input.Account.Hex()
|
||||
sks, err := p.redisClient.Keys(p.ctx, prefix+"*").Result()
|
||||
if err != nil {
|
||||
logger.Println("session provider delete :", sks, err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
for _, sk := range sks {
|
||||
p.redisClient.HSet(p.ctx, sk, "inv", "true")
|
||||
p.redisClient.Publish(p.ctx, p.deleteChannel, sk).Result()
|
||||
}
|
||||
|
||||
for {
|
||||
duplicated := false
|
||||
for _, sk := range sks {
|
||||
if sk == string(newsk) {
|
||||
duplicated = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !duplicated {
|
||||
break
|
||||
}
|
||||
newsk = make_storagekey(input.Account)
|
||||
}
|
||||
|
||||
_, err = p.redisClient.HSet(p.ctx, string(newsk), input.ToStrings()).Result()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
_, err = p.redisClient.Expire(p.ctx, string(sk), p.ttl).Result()
|
||||
_, err = p.redisClient.Expire(p.ctx, string(newsk), p.ttl).Result()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
pk := storagekey_to_publickey(sk)
|
||||
pk := storagekey_to_publickey(newsk)
|
||||
return string(pk), err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user