35 lines
720 B
Go
35 lines
720 B
Go
package middlewares
|
|
|
|
import (
|
|
"context"
|
|
|
|
"backend/common/consts"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func (f *Middlewares) JwtParse(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 {
|
|
return errors.Wrap(err, "failed to parse token")
|
|
}
|
|
|
|
// query user
|
|
user, err := f.userSvc.GetByOpenID(c.Context(), claim.ID)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to get user")
|
|
}
|
|
|
|
c.SetUserContext(context.WithValue(c.UserContext(), consts.CtxKeyJwt, token))
|
|
c.SetUserContext(context.WithValue(c.UserContext(), consts.CtxKeySession, user))
|
|
|
|
return c.Next()
|
|
}
|