App Logo
Integrations

Routers

Integrate with popular Go HTTP routers

Standard Library (net/http)

package main

import (
	"log"
	"net/http"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	// Mount auth routes
	http.Handle("/api/auth/", auth.Handler())

	log.Println("Server running on http://localhost:8080")
	log.Fatal(http.ListenAndServe(":8080", nil))
}

Chi Router

package main

import (
	"log"
	"net/http"

	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	r := chi.NewRouter()

	// Add middleware
	r.Use(middleware.Logger)
	r.Use(middleware.Recoverer)

	// Mount auth handler
	r.Mount("/api/auth", http.StripPrefix("/api/auth", auth.Handler()))

	log.Println("Server running on http://localhost:8080")
	log.Fatal(http.ListenAndServe(":8080", r))
}

Echo Router

package main

import (
	"log"
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	e := echo.New()

	// Add middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	// Mount auth handler
	e.Any("/api/auth/*", echo.WrapHandler(auth.Handler()))

	log.Println("Server running on http://localhost:8080")
	log.Fatal(e.Start(":8080"))
}

Gin Router

package main

import (
	"log"

	"github.com/gin-gonic/gin"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	r := gin.Default()

	// Mount auth handler
	r.Any("/api/auth/*path", gin.WrapH(auth.Handler()))

	log.Println("Server running on http://localhost:8080")
	log.Fatal(r.Run(":8080"))
}

Fiber Router

package main

import (
	"log"

	"github.com/gofiber/fiber/v2"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	app := fiber.New()

	// Mount auth handler
	app.Use("/api/auth", func(c *fiber.Ctx) error {
		return auth.Handler().ServeHTTP(c.Response().Writer, c.Request())
	})

	log.Println("Server running on http://localhost:8080")
	log.Fatal(app.Listen(":8080"))
}

Gorilla Mux

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/mux"

	gobetterauth "github.com/GoBetterAuth/go-better-auth"
	gobetterauthconfig "github.com/GoBetterAuth/go-better-auth/config"
	gobetterauthmodels "github.com/GoBetterAuth/go-better-auth/models"
)

func main() {
	config := gobetterauthconfig.NewConfig(
		gobetterauthconfig.WithAppName("MyApp"),
		gobetterauthconfig.WithBasePath("/api/auth"),
		gobetterauthconfig.WithDatabase(gobetterauthmodels.DatabaseConfig{
			Provider:         "sqlite",
			ConnectionString: "./auth.db",
		}),
	)
	auth := gobetterauth.New(config)
	auth.RunMigrations()

	r := mux.NewRouter()

	// Mount auth handler
	r.PathPrefix("/api/auth/").Handler(http.StripPrefix("/api/auth", auth.Handler()))

	log.Println("Server running on http://localhost:8080")
	log.Fatal(http.ListenAndServe(":8080", r))
}

Middleware configuration

Coming soon...


CORS Configuration

Configure CORS for web applications:

// Chi example
r.Use(cors.Handler(cors.Options{
	AllowedOrigins:   []string{"http://localhost:3000", "https://example.com"},
	AllowedMethods:   []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
	AllowedHeaders:   []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
	AllowCredentials: true,
}))

Base Path Configuration

Configure custom base paths:

config := gobetterauthconfig.NewConfig(
	...,
	gobetterauthconfig.WithBasePath("/api/v1/auth"),
)

Then mount accordingly:

// Chi
r.Mount("/api/v1/auth", http.StripPrefix("/api/v1/auth", auth.Handler()))

// Echo
e.Any("/api/v1/auth/*", echo.WrapHandler(auth.Handler()))

On this page