fastify-xauth-better
getSession(request)
Resolves the Better Auth session from a Fastify request without using middleware.
getSession(request)
Resolves the Better Auth session from the request's cookies or Authorization: Bearer header. Returns null if no valid session exists. Useful for optional authentication — routes that work for both authenticated and anonymous users.
Signature
instance.getSession(
request: FastifyRequest
): Promise<{ session: Session; user: User } | null>
Params
| Name | Type | Required | Description |
|---|---|---|---|
request | FastifyRequest | Yes | The Fastify request object |
Returns
Promise<{ session, user } | null> — the full Better Auth session object, or null if the request is unauthenticated.
Throws
Does not throw. Returns null on any session resolution failure.
Examples
Optional auth — serve different content to authenticated users
const userAuth = fastify.xauthbetter.get("user");
fastify.get("/api/feed", async (request) => {
const session = await userAuth.getSession(request);
if (session) {
return { feed: await getPersonalizedFeed(session.user.id) };
}
return { feed: await getPublicFeed() };
});
Manual audit logging with session
fastify.post("/api/checkout", async (request) => {
const session = await userAuth.getSession(request);
if (!session) {
return reply.code(401).send({ error: "Login required" });
}
const order = await processOrder(request.body, session.user.id);
await userAuth.auditLog.log("auth.login.success", {
userId: session.user.id,
metadata: { action: "checkout", orderId: order.id },
request,
});
return order;
});
See also
- requireAuth() — use when authentication is required, not optional
- audit-log.log() — log events with the resolved user
AI Context
package: "@xenterprises/fastify-xauth-better"
method: fastify.xauthbetter.get(name).getSession(request)
use-when: Resolve a Better Auth session from headers/cookies without middleware — useful for optional auth routes
returns: { session, user } | null
