package logic import ( "admin/internal/dao" "context" "time" "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 AdminRefreshLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewAdminRefreshLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminRefreshLogic { return &AdminRefreshLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *AdminRefreshLogic) AdminRefresh(in *admin.AdminEmptyRequest) (*admin.Response, error) { adminInfo := utils.GetUserFromCtx(l.ctx) l.Logger.Error(adminInfo) if len(adminInfo.Refresh) < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo), nil } //获取登录过期时间 expireMin := utils.GetConfigInt("base.login_out_time") expire := time.Duration(expireMin) * time.Minute //获取刷新登录过期时间 refreshMin := utils.GetConfigInt("base.login_refresh_out_time") refreshExpire := time.Duration(refreshMin) * time.Minute //登录信息写入redis refreshKey := utils.GetLoginRefreshKey(utils.LoginTypeAdmin, adminInfo.Refresh) ctx := context.Background() id, err := redis.Client.Get(ctx, refreshKey).Result() if err != nil { return l.fail(utils.ErrorNoLoginInfo), nil } //获取原来的token与refresh redisKeysKey := utils.GetLoginKeysKey(utils.LoginTypeAdmin, id) var LoginInfo utils.LoginRedis oldAuth, oldErr := redis.Client.Get(ctx, redisKeysKey).Result() if oldErr != nil { return l.fail(utils.ErrorNoLoginInfo), nil } _ = jsoniter.Unmarshal([]byte(oldAuth), &LoginInfo) if len(LoginInfo.Token) > utils.NumberOne { redis.Client.Del(ctx, utils.GetLoginKey(utils.LoginTypeAdmin, LoginInfo.Token)).Result() } if len(LoginInfo.Refresh) > utils.NumberOne { redis.Client.Del(ctx, utils.GetLoginRefreshKey(utils.LoginTypeAdmin, LoginInfo.Refresh)).Result() } retData := dao.Token{ Token: utils.MD5Encrypt(id + utils.Now().String()), } retData.Refresh = utils.MD5Encrypt(id + retData.Token) //var info dao.JwtInfo //_ = jsoniter.Unmarshal(LoginInfo.Info, &info) redisKey := utils.GetLoginKey(utils.LoginTypeAdmin, retData.Token) redis.Client.Set(ctx, redisKey, LoginInfo.Info, expire).Result() //更新新的数据 LoginInfo.Token = retData.Token LoginInfo.Refresh = retData.Refresh newStr, _ := jsoniter.Marshal(LoginInfo) redis.Client.Set(ctx, redisKeysKey, newStr, refreshExpire).Result() //登录刷新信息写入redis newRefreshKey := utils.GetLoginRefreshKey(utils.LoginTypeAdmin, retData.Refresh) redis.Client.Set(ctx, newRefreshKey, id, refreshExpire).Result() return l.ok(retData), nil }