Open tcuongtran opened 1 week ago
Auth.go:
Auth.go
package main import ( "net/http" "strings" "github.com/golang-jwt/jwt/v4" ) func authMiddleware(next http.HandlerFunc, jwtSecret string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") authHeader := r.Header.Get("Authorization") if authHeader == "" { http.Error(w, "Missing auth token", http.StatusUnauthorized) return } bearerToken := strings.Split(authHeader, " ") if len(bearerToken) != 2 || strings.ToLower(bearerToken[0]) != "bearer" { http.Error(w, "Invalid token format", http.StatusUnauthorized) return } token := bearerToken[1] // Verify the token claims := jwt.MapClaims{} _, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) { return []byte(jwtSecret), nil }) if err != nil { http.Error(w, "Invalid token", http.StatusUnauthorized) return } // You can access claims if needed // For example: userID := claims["sub"].(string) next.ServeHTTP(w, r) } }
main.go:
main.go
func main() { err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } jwtSecret := os.Getenv("JWT_SECRET") if jwtSecret == "" { log.Fatal("Please set the JWT_SECRET environment variable") } // Create a new ServeMux mux := http.NewServeMux() mux.HandleFunc("/api/items", authMiddleware(handleItems, jwtSecret)) mux.HandleFunc("/api/item", authMiddleware(handleItem, jwtSecret)) nextSubFS, err := fs.Sub(nextFS, "client/dist") if err != nil { log.Fatal(err) } mux.Handle("/", http.FileServer(http.FS(nextSubFS))) fmt.Println("Server is running on port 8080...") log.Fatal(http.ListenAndServe(":8080", mux)) }
Auth.go
:main.go
: