package middlewares import ( "time" "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 { queryToken := c.Query("token") tokens = []string{queryToken} if len(tokens) == 0 { return c.Next() } } token := tokens[0] claim, err := f.jwt.Parse(token) if err != nil { c.Cookie(&fiber.Cookie{ Name: "token", Value: "", Expires: time.Now().Add(-1 * time.Hour), HTTPOnly: true, }) 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.Cookie(&fiber.Cookie{ Name: "token", Value: "", Expires: time.Now().Add(-1 * time.Hour), HTTPOnly: true, }) 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.Cookie(&fiber.Cookie{ Name: "token", Value: "", Expires: time.Now().Add(-1 * time.Hour), HTTPOnly: true, }) return errorx.RequestUnAuthorized } c.Locals(consts.CtxKeyJwt, token) c.Locals(consts.CtxKeyClaim, claim) return c.Next() }