Files
mp-qvyun/backend/modules/middlewares/m_jwt_parse.go
2024-12-19 10:35:05 +08:00

45 lines
1.0 KiB
Go

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()
}