package utils import ( "errors" "fmt" "github.com/kataras/iris/v12" "github.com/sirupsen/logrus" "main/database" "main/model" "strings" ) var UserList []model.Userinfo // GetLoginUser 根据token获取用户,返回用户信息 func GetLoginUser(ctx iris.Context) model.Userinfo { auth := ctx.GetHeader("Authorization") fmt.Println(auth) if auth == "" || !strings.Contains(auth, "Bearer") { ctx.StatusCode(iris.StatusUnauthorized) ctx.SetErr(errors.New("未登录")) logrus.Warningln("请求未携带token信息") return model.Userinfo{} } var tokens []model.JwtKeys db := database.GetInstance().GetMysqlDb() fmt.Println(strings.Split(auth, " ")[1]) if err := db.Where("token = ?", strings.Split(auth, " ")[1]).Find(&tokens).Error; err != nil { logrus.Errorln("sql执行失败:", err) } if len(tokens) == 0 { ctx.StatusCode(iris.StatusUnauthorized) ctx.SetErr(errors.New("未登录")) logrus.Warningln(auth, "token信息无效") return model.Userinfo{} } else { return GetUserInfo(tokens[0].Username) } //foobar := auth.Claims.(jwt.MapClaims) //for key, value := range foobar { // if key == "username" { // return GetUserInfo(value.(string)) // } //} //ctx.StatusCode(iris.StatusInternalServerError) //ctx.SetErr(errors.New("系统错误,请联系管理员")) //logrus.Errorln("token存在但获取用户信息失败") //return model.Userinfo{} } // GetUserInfo 根据用户名获取用户信息,先更新本地数据 func GetUserInfo(username string) model.Userinfo { if len(UserList) == 0 { logrus.Warnln("暂存用户列表为空,刷新数据") UpdateUserInfo() } for _, u := range UserList { if u.Username == username { return u } } logrus.Warnln("未找到对应的用户信息") return model.Userinfo{} } // UpdateUserInfo 更新当前用户信息 func UpdateUserInfo() { db := database.GetInstance().GetMysqlDb() if err := db.Find(&UserList).Error; err != nil { logrus.Errorln("sql执行失败:", err) } logrus.Infoln("刷新暂存用户列表") }