package logic import ( "context" "lone-services/pkg/redis" "lone-services/pkg/utils" admin "lone-services/rpc/admin/pb" "lone-services/services/admin/internal/svc" "strconv" jsoniter "github.com/json-iterator/go" "github.com/zeromicro/go-zero/core/logx" ) type LogOutLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewLogOutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogOutLogic { return &LogOutLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *LogOutLogic) LogOut(in *admin.AdminEmptyRequest) (*admin.Response, error) { adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo) } redisKeysKey := utils.GetLoginKeysKey(utils.LoginTypeAdmin, strconv.FormatInt(adminInfo.ID, utils.NumberTen)) var LoginInfo utils.LoginRedis oldAuth, oldErr := redis.Client.Get(l.ctx, redisKeysKey).Result() if oldErr != nil { return l.fail(utils.ErrorNoLoginInfo) } err := jsoniter.Unmarshal([]byte(oldAuth), &LoginInfo) if err != nil { return l.fail(utils.ErrorNoLoginInfo) } redisTokenKey := utils.GetLoginKey(utils.LoginTypeAdmin, LoginInfo.Token) redisRefreshKey := utils.GetLoginRefreshKey(utils.LoginTypeAdmin, LoginInfo.Refresh) redis.Client.Del(l.ctx, redisTokenKey).Result() redis.Client.Del(l.ctx, redisRefreshKey).Result() redis.Client.Del(l.ctx, redisKeysKey).Result() return l.ok(utils.NumberOne) }