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()))