Docs

Elysia Integration

This integration guide is assuming you are using Elysia with bun server.

Before you start, make sure you have a Better Auth instance configured. If you haven't done that yet, check out the installation.

Mount the handler

We need to mount the handler to Elysia endpoint.

import { Elysia } from "elysia";
import { auth } from "./auth";
 
const app = new Elysia().mount(auth.handler).listen(3000);
 
console.log(
  `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`,
);

CORS

To configure cors, you can use the cors plugin from @elysiajs/cors.

import { Elysia } from "elysia";
import { cors } from "@elysiajs/cors";
 
import { auth } from "./auth";
 
const app = new Elysia()
  .use(
    cors({
      origin: "http://localhost:3001",
      methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
      credentials: true,
      allowedHeaders: ["Content-Type", "Authorization"],
    }),
  )
  .mount(auth.handler)
  .listen(3000);
 
console.log(
  `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`,
);

Macro

You can use macro with resolve to provide session and user information before pass to view.

import { Elysia } from "elysia";
import { auth } from "./auth";
 
// user middleware (compute user and session and pass to routes)
const betterAuth = new Elysia({ name: "better-auth" })
  .mount(auth.handler)
  .macro({
    auth: {
      async resolve({ error, request: { headers } }) {
        const session = await auth.api.getSession({
          headers,
        });
 
        if (!session) return error(401);
 
        return {
          user: session.user,
          session: session.session,
        };
      },
    },
  });
 
const app = new Elysia()
  .use(betterAuth)
  .get("/user", ({ user }) => user, {
    auth: true,
  })
  .listen(3000);
 
console.log(
  `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`,
);

This will allow you to access the user and session object in all of your routes.

On this page