fix(auth): verify BetterAuth sessions via cookie headers
This commit is contained in:
@@ -410,7 +410,7 @@ describe("AuthService", () => {
|
||||
},
|
||||
};
|
||||
|
||||
it("should return session data for valid token", async () => {
|
||||
it("should validate session token using secure BetterAuth cookie header", async () => {
|
||||
const auth = service.getAuth();
|
||||
const mockGetSession = vi.fn().mockResolvedValue(mockSessionData);
|
||||
auth.api = { getSession: mockGetSession } as any;
|
||||
@@ -418,7 +418,43 @@ describe("AuthService", () => {
|
||||
const result = await service.verifySession("valid-token");
|
||||
|
||||
expect(result).toEqual(mockSessionData);
|
||||
expect(mockGetSession).toHaveBeenCalledTimes(1);
|
||||
expect(mockGetSession).toHaveBeenCalledWith({
|
||||
headers: {
|
||||
cookie: "__Secure-better-auth.session_token=valid-token",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("should fall back to Authorization header when cookie-based lookups miss", async () => {
|
||||
const auth = service.getAuth();
|
||||
const mockGetSession = vi
|
||||
.fn()
|
||||
.mockResolvedValueOnce(null)
|
||||
.mockResolvedValueOnce(null)
|
||||
.mockResolvedValueOnce(null)
|
||||
.mockResolvedValueOnce(mockSessionData);
|
||||
auth.api = { getSession: mockGetSession } as any;
|
||||
|
||||
const result = await service.verifySession("valid-token");
|
||||
|
||||
expect(result).toEqual(mockSessionData);
|
||||
expect(mockGetSession).toHaveBeenNthCalledWith(1, {
|
||||
headers: {
|
||||
cookie: "__Secure-better-auth.session_token=valid-token",
|
||||
},
|
||||
});
|
||||
expect(mockGetSession).toHaveBeenNthCalledWith(2, {
|
||||
headers: {
|
||||
cookie: "better-auth.session_token=valid-token",
|
||||
},
|
||||
});
|
||||
expect(mockGetSession).toHaveBeenNthCalledWith(3, {
|
||||
headers: {
|
||||
cookie: "__Host-better-auth.session_token=valid-token",
|
||||
},
|
||||
});
|
||||
expect(mockGetSession).toHaveBeenNthCalledWith(4, {
|
||||
headers: {
|
||||
authorization: "Bearer valid-token",
|
||||
},
|
||||
@@ -517,14 +553,10 @@ describe("AuthService", () => {
|
||||
|
||||
it("should re-throw 'certificate has expired' as infrastructure error (not auth)", async () => {
|
||||
const auth = service.getAuth();
|
||||
const mockGetSession = vi
|
||||
.fn()
|
||||
.mockRejectedValue(new Error("certificate has expired"));
|
||||
const mockGetSession = vi.fn().mockRejectedValue(new Error("certificate has expired"));
|
||||
auth.api = { getSession: mockGetSession } as any;
|
||||
|
||||
await expect(service.verifySession("any-token")).rejects.toThrow(
|
||||
"certificate has expired"
|
||||
);
|
||||
await expect(service.verifySession("any-token")).rejects.toThrow("certificate has expired");
|
||||
});
|
||||
|
||||
it("should re-throw 'Unauthorized: Access denied for user' as infrastructure error (not auth)", async () => {
|
||||
|
||||
Reference in New Issue
Block a user