세션 중복 로그인 금지
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) {
|
func (p *provider_redis) New(input *Authorization) (string, error) {
|
||||||
sk := make_storagekey(input.Account)
|
newsk := make_storagekey(input.Account)
|
||||||
_, err := p.redisClient.HSet(p.ctx, string(sk), input.ToStrings()).Result()
|
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 {
|
if err != nil {
|
||||||
return "", err
|
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 {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
pk := storagekey_to_publickey(sk)
|
pk := storagekey_to_publickey(newsk)
|
||||||
return string(pk), err
|
return string(pk), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user