세션 중복 로그인 금지

This commit is contained in:
2024-04-22 18:05:43 +09:00
parent 564827dd9c
commit 4aa071441b

View File

@ -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
}