package middlewares import ( "backend/pkg/consts" "backend/pkg/errorx" "github.com/gofiber/fiber/v3" log "github.com/sirupsen/logrus" ) func (f *Middlewares) ParseJWT(c fiber.Ctx) error { tokens := c.GetReqHeaders()["Authorization"] if len(tokens) == 0 { return c.Next() } token := tokens[0] claim, err := f.jwt.Parse(token) if err != nil { c.ClearCookie("token") log.Errorf("failed to parse jwt from token: %s", token) return errorx.RequestUnAuthorized } // query user _, err = f.userSvc.GetByOpenID(c.Context(), claim.OpenID) if err != nil { log.Errorf("failed to get user by open id(%s) from token: %s", claim.OpenID, token) c.ClearCookie("token") return errorx.RequestUnAuthorized } _, err = f.userSvc.GetTenantBySlug(c.Context(), claim.Tenant) if err != nil { log.Errorf("failed to get tenant(%s) by from token: %s", claim.Tenant, token) c.ClearCookie("token") return errorx.RequestUnAuthorized } c.Locals(consts.CtxKeyJwt, token) c.Locals(consts.CtxKeyClaim, claim) return c.Next() }