package worker import ( "time" "zhiyuan/models" "zhiyuan/pkg/config" "zhiyuan/pkg/db" "zhiyuan/pkg/errcode" "zhiyuan/pkg/redis" "zhiyuan/pkg/utils" ) const tokenPrefix = "worker_token_" func CheckToken(token string) (*models.Worker, errcode.Err) { result, err := redis.Get(tokenPrefix + token) var worker *models.Worker if err != nil { worker, err = GetInfoByToken(token, nil, nil) if err != nil || worker == nil { return nil, errcode.TokenInvalid } redis.Set(tokenPrefix+"_"+token, worker, 3600) redis.Set(tokenPrefix+"_"+utils.ToStr(worker.ID), tokenPrefix+token, 3600) } else { utils.JsonDecode(result).To(&worker) } if worker == nil || time.Now().Unix() >= utils.StrTo(utils.ToStr(worker.AccessTokenExipred)).MustInt64() { return nil, errcode.TokenExpired } return worker, errcode.Err{} } func UpdateToken(id int) (string, error) { token := utils.MD5(utils.ToStr(time.Now().UnixNano()) + string(utils.RandomCreateBytes(10, utils.RAND_KIND_ALL))) tokenExpired := int(time.Now().Unix()) + config.Cfg.App.TokenExpire _, err := db.Update(Worker.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{ "access_token": token, "access_token_expired": tokenExpired}) if err != nil { return token, err } preToken, err := redis.Get(tokenPrefix + "_" + utils.ToStr(id)) if preToken != "" { redis.Del(preToken) } return token, nil } func ClearToken(id int) error { _, err := db.Update(Worker.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{"access_token": ""}) preToken, err := redis.Get(tokenPrefix + "_" + utils.ToStr(id)) if preToken != "" { redis.Del(preToken) } return err }