package admin import ( "time" "zhiyuan/models" "zhiyuan/pkg/config" "zhiyuan/pkg/db" "zhiyuan/pkg/errcode" "zhiyuan/pkg/redis" "zhiyuan/pkg/utils" ) const tokenPrefix = "admin_token_" func CheckToken(token string, origin string) (*models.Admin, errcode.Err) { result, err := redis.Get(tokenPrefix + origin + "_" + token) var admin *models.Admin if err != nil { admin, err = GetInfoByToken(token, nil, nil) if err != nil || admin == nil { return nil, errcode.TokenInvalid } _ = redis.Set(tokenPrefix+origin+"_"+token, admin, 3600) _ = redis.Set(tokenPrefix+origin+"_"+utils.ToStr(admin.ID), tokenPrefix+origin+"_"+token, 3600) } else { utils.JsonDecode(result).To(&admin) } if admin == nil || time.Now().Unix() >= utils.StrTo(utils.ToStr(admin.AccessTokenExpired)).MustInt64() { return nil, errcode.TokenExpired } return admin, errcode.Err{} } func UpdateToken(id int, origin string) (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(Admin.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 + origin + "_" + utils.ToStr(id)) if preToken != "" { redis.Del(preToken) } return token, nil } func ClearToken(id int, origin string) error { _, err := db.Update(Admin.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{"access_token": ""}) preToken, err := redis.Get(tokenPrefix + origin + "_" + utils.ToStr(id)) if preToken != "" { redis.Del(preToken) } return err }