fix: skip auth session lookup on non-api requests

This commit is contained in:
Dotta committed 2026-04-14 11:52:57 -05:00
1 parent 83fac16c38
commit e16beed78e
2 files changed
+55 -1

No files matched your search

@@ -0,0 +1,43 @@
import { describe, expect, it, vi } from "vitest";
import express from "express";
import request from "supertest";
import { actorMiddleware } from "../middleware/auth.js";
function createApp(resolveSession: ReturnType<typeof vi.fn>) {
const app = express();
app.use(
actorMiddleware({} as never, {
deploymentMode: "authenticated",
resolveSession,
}),
);
app.get("/", (_req, res) => {
res.status(200).send("ok");
});
app.get("/api/ping", (_req, res) => {
res.status(200).json({ ok: true });
});
return app;
}
describe("actorMiddleware", () => {
it("skips session resolution for non-api page requests", async () => {
const resolveSession = vi.fn(async () => null);
const app = createApp(resolveSession);
const res = await request(app).get("/");
expect(res.status).toBe(200);
expect(resolveSession).not.toHaveBeenCalled();
});
it("still resolves sessions for api requests", async () => {
const resolveSession = vi.fn(async () => null);
const app = createApp(resolveSession);
const res = await request(app).get("/api/ping");
expect(res.status).toBe(200);
expect(resolveSession).toHaveBeenCalledOnce();
});
});
+12 -1
View File
@@ -18,6 +18,13 @@ interface ActorMiddlewareOptions {
resolveSession?: (req: Request) => Promise<BetterAuthSessionResult | null>;
}
function shouldResolveBoardSession(req: Request): boolean {
// Only API routes consume req.actor. Skipping session resolution for
// document/static requests avoids unnecessary Better Auth work on each
// Vite-served page load in authenticated dev mode.
return req.path.startsWith("/api");
}
export function actorMiddleware(db: Db, opts: ActorMiddlewareOptions): RequestHandler {
const boardAuth = boardAuthService(db);
return async (req, _res, next) => {
@@ -30,7 +37,11 @@ export function actorMiddleware(db: Db, opts: ActorMiddlewareOptions): RequestHa
const authHeader = req.header("authorization");
if (!authHeader?.toLowerCase().startsWith("bearer ")) {
if (opts.deploymentMode === "authenticated" && opts.resolveSession) {
if (
opts.deploymentMode === "authenticated" &&
opts.resolveSession &&
shouldResolveBoardSession(req)
) {
let session: BetterAuthSessionResult | null = null;
try {
session = await opts.resolveSession(req);