added auth validate route

This commit is contained in:
2025-01-28 18:09:26 +01:00
parent f7efee56f0
commit 86c43fffc0
4 changed files with 31 additions and 5 deletions

View File

@@ -131,6 +131,13 @@ func Login(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "Successfully logged in", "username": u.Username, "user_id": userId}) return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "Successfully logged in", "username": u.Username, "user_id": userId})
} }
//func ValidateToken(c *fiber.Ctx) error { func ValidateToken(c *fiber.Ctx) error {
// username := c.Locals("username")
//} userId := c.Locals("user_id")
if userId == nil || username == nil {
fmt.Println("userId or username is nil")
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid token"})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "authorized", "username": c.Locals("username").(string), "user_id": c.Locals("userId").(string)})
}

View File

@@ -3,7 +3,9 @@ package middleware
import ( import (
jwtware "github.com/gofiber/contrib/jwt" jwtware "github.com/gofiber/contrib/jwt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/golang-jwt/jwt/v5"
"os" "os"
"relay-server/model"
) )
func Protected() fiber.Handler { func Protected() fiber.Handler {
@@ -11,6 +13,15 @@ func Protected() fiber.Handler {
SigningKey: jwtware.SigningKey{Key: []byte(os.Getenv("JWT_SECRET"))}, SigningKey: jwtware.SigningKey{Key: []byte(os.Getenv("JWT_SECRET"))},
ErrorHandler: jwtError, ErrorHandler: jwtError,
TokenLookup: "cookie:token", TokenLookup: "cookie:token",
Claims: &model.UserClaims{},
SuccessHandler: func(c *fiber.Ctx) error {
user := c.Locals("user").(*jwt.Token)
claims := user.Claims.(*model.UserClaims)
c.Locals("userId", claims.UserId)
c.Locals("username", claims.Username)
return c.Next()
},
}) })
} }

View File

@@ -1,5 +1,7 @@
package model package model
import "github.com/golang-jwt/jwt/v5"
type LoginStruct struct { type LoginStruct struct {
Username string `json:"username" xml:"username" form:"username"` Username string `json:"username" xml:"username" form:"username"`
Password string `json:"password" xml:"password" form:"password"` Password string `json:"password" xml:"password" form:"password"`
@@ -9,3 +11,9 @@ type SignupStruct struct {
Username string `json:"username" xml:"username" form:"username"` Username string `json:"username" xml:"username" form:"username"`
Password string `json:"password" xml:"password" form:"password"` Password string `json:"password" xml:"password" form:"password"`
} }
type UserClaims struct {
Username string `json:"username"`
UserId string `json:"user_id"`
jwt.RegisteredClaims
}

View File

@@ -14,8 +14,8 @@ func SetupRoutes(app *fiber.App) {
api := app.Group("/api", logger.New()) api := app.Group("/api", logger.New())
// Auth group // Auth group
auth := api.Group("/auth") auth := api.Group("/auth", middleware.Protected(), handlers.ValidateToken)
auth.Post("/signup", handlers.Signup) auth.Post("/signup", handlers.Signup)
auth.Post("/login", handlers.Login) auth.Post("/login", handlers.Login)
auth.Get("/validate", handlers.ValidateToken)
} }