package logic import ( "admin/validator" "context" "strconv" "admin/admin" "admin/internal/svc" jsoniter "github.com/json-iterator/go" "github.com/zeromicro/go-zero/core/logx" "pkg.local/redis" "pkg.local/utils" ) type LoginKickedOutLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewLoginKickedOutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginKickedOutLogic { return &LoginKickedOutLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *LoginKickedOutLogic) LoginKickedOut(in *admin.LoginKickedOutRequest) (*admin.Response, error) { var v validator.LoginKickedOutValidator if fail := l.checkParams(in, &v); fail != nil { return fail, nil } adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo) } infoKey := utils.GetLoginKeysKey(utils.LoginTypeAdmin, strconv.FormatInt(in.Id, utils.NumberTen)) json, err := redis.Client.Get(l.ctx, infoKey).Result() if err != nil { return l.out(utils.Fail, "获取登录信息失败") } var info utils.LoginRedis err = jsoniter.Unmarshal([]byte(json), &info) if err != nil { l.Logger.Error(err) return l.fail(utils.ErrorJsonDataError) } refreshKey := utils.GetLoginRefreshKey(utils.LoginTypeAdmin, info.Refresh) tokenKey := utils.GetLoginKey(utils.LoginTypeAdmin, info.Token) _, err = redis.Client.Del(l.ctx, infoKey).Result() if err != nil { return l.fail(utils.Fail) } _, err = redis.Client.Del(l.ctx, refreshKey).Result() if err != nil { return l.fail(utils.Fail) } _, err = redis.Client.Del(l.ctx, tokenKey).Result() if err != nil { return l.fail(utils.Fail) } return l.ok(utils.NumberOne) }