38 lines
899 B
Go

package middlewares
import (
"backend/pkg/jwt"
"strings"
"github.com/gofiber/fiber/v2"
)
const userClaimsKey = "User-Claims"
func JWTAuthMiddleware(secret []byte) fiber.Handler {
return func(c *fiber.Ctx) error {
authHeader := c.Get("Authorization")
if authHeader == "" || !strings.HasPrefix(authHeader, "Bearer ") {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "missing or invalid Authorization header",
})
}
tokenString := strings.TrimPrefix(authHeader, "Bearer ")
claims, err := jwt.ParseToken(tokenString, secret)
if err != nil || claims == nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid or expired token",
})
}
c.Locals(userClaimsKey, claims)
return c.Next()
}
}
func GetUserClaims(c *fiber.Ctx) *jwt.UserClaims {
claims, _ := c.Locals(userClaimsKey).(*jwt.UserClaims)
return claims
}