세션 삭제용 구조체 선언

This commit is contained in:
2025-09-11 11:30:10 +09:00
parent 0392966760
commit e67009522d
2 changed files with 24 additions and 24 deletions

View File

@ -57,8 +57,9 @@ type Provider interface {
}
type InvalidatedSession struct {
Account primitive.ObjectID
Infinite bool
Account primitive.ObjectID
SessionKeys []string
Infinite bool
}
type Consumer interface {

View File

@ -2,6 +2,7 @@ package session
import (
"context"
"encoding/json"
"errors"
"fmt"
"slices"
@ -78,12 +79,17 @@ func (p *provider_redis) RevokeAll(account primitive.ObjectID, infinite bool) ([
return nil, err
}
for _, sk := range sks {
if infinite {
p.redisClient.Publish(p.ctx, p.deleteChannel, "~"+sk).Result()
} else {
p.redisClient.Publish(p.ctx, p.deleteChannel, sk).Result()
if len(sks) > 0 {
p.redisClient.Del(p.ctx, sks...)
invsess := InvalidatedSession{
SessionKeys: sks,
Account: account,
Infinite: infinite,
}
data, _ := json.Marshal(invsess)
p.redisClient.Publish(p.ctx, p.deleteChannel, string(data)).Result()
}
return sks, nil
@ -172,25 +178,18 @@ func newConsumerWithRedis(ctx context.Context, redisUrl string, ttl time.Duratio
switch msg.Channel {
case deleteChannel:
infinite := false
var sk string
if msg.Payload[0] == '~' {
sk = msg.Payload[1:]
infinite = true
} else {
sk = msg.Payload
infinite = false
var invsess InvalidatedSession
if err := json.Unmarshal([]byte(msg.Payload), &invsess); err != nil {
logger.Println("redis consumer deleteChannel unmarshal failed :", err)
break
}
old := consumer.delete(storagekey(sk))
if old != nil {
invsess := InvalidatedSession{
Account: old.Account,
Infinite: infinite,
}
for _, f := range consumer.onSessionInvalidated {
f(invsess)
}
for _, sk := range invsess.SessionKeys {
consumer.delete(storagekey(sk))
}
for _, f := range consumer.onSessionInvalidated {
f(invsess)
}
}
}