Skip to Content
DocsRecipesAuth adapter: Better Auth, Firebase

Auth adapter: Better Auth, Firebase

An AuthAdapter has one method: getUser(req). It returns a QuickbenUser or null. Sign-in, sessions and passwords stay in your auth library.

These are outlines. They are not published packages. Check the auth library’s docs for the current API.

Better Auth

lib/quickben-auth.ts
import type { AuthAdapter } from "@quickben/core"; import { auth } from "./auth"; // your betterAuth({ … }) instance export const betterAuthAdapter: AuthAdapter = { async getUser(req) { const session = await auth.api.getSession({ headers: req.headers }); if (!session) return null; return { id: session.user.id, email: session.user.email, roles: session.user.role ? [session.user.role] : [], }; }, };
StepDetail
Users collectionOptional. Better Auth stores users in its own tables.
RolesMap from your Better Auth plugin (for example the admin plugin’s role).
ConfigdefineConfig({ …, auth: betterAuthAdapter })

Firebase Authentication

lib/quickben-auth.ts
import { getAuth } from "firebase-admin/auth"; import type { AuthAdapter } from "@quickben/core"; export const firebaseAdapter: AuthAdapter = { async getUser(req) { const header = req.headers.get("authorization"); const token = header?.startsWith("Bearer ") ? header.slice(7) : null; if (!token) return null; try { const decoded = await getAuth().verifyIdToken(token); return { id: decoded.uid, email: decoded.email, roles: Array.isArray(decoded.roles) ? decoded.roles : [], }; } catch { return null; } }, };
StepDetail
TokenID token in Authorization: Bearer, or a session cookie with verifySessionCookie.
RolesSet as custom claims with setCustomUserClaims(uid, { roles }).
Invalid tokenReturn null. The request is then anonymous.

Rules for any adapter

RuleWhy it matters to you
Return null on any failureAccess rules treat the request as anonymous.
Do not throw for bad tokensA throw becomes a 500 response instead of a 401.
Keep it fastIt runs on every request.
Extra fieldsAdd them to QuickbenUser with declaration merging.
Last updated on