test auth fix idk
All checks were successful
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m34s
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 47s

This commit is contained in:
yohlo
2026-03-02 10:02:13 -06:00
parent 3909fbc966
commit 6fddbbab68
5 changed files with 84 additions and 68 deletions

View File

@@ -122,26 +122,12 @@ export const Route = createRootRouteWithContext<{
context.queryClient,
playerQueries.auth()
);
console.log('__root beforeLoad auth data:', auth);
return { auth };
} catch (error: any) {
if (typeof window !== 'undefined') {
const { doesSessionExist } = await import('supertokens-web-js/recipe/session');
const { refreshManager } = await import('@/lib/supertokens/refresh-manager');
const sessionExists = await doesSessionExist();
if (sessionExists) {
try {
await refreshManager.refresh();
const auth = await ensureServerQueryData(
context.queryClient,
playerQueries.auth()
);
return { auth };
} catch {
return {};
}
}
}
console.error('__root beforeLoad error:', error);
return {};
}
},

View File

@@ -5,10 +5,14 @@ import { Flex, Loader } from "@mantine/core";
export const Route = createFileRoute("/_authed")({
beforeLoad: ({ context }) => {
console.log('_authed beforeLoad context:', context.auth);
if (!context.auth?.user) {
console.log('_authed: No user in context, redirecting to login');
throw redirect({ to: "/login" });
}
console.log('_authed: User found, allowing access');
return {
auth: {
...context.auth,

View File

@@ -1,7 +1,7 @@
import { useEffect, useRef } from 'react';
import { doesSessionExist } from 'supertokens-web-js/recipe/session';
import { refreshManager } from '@/lib/supertokens/refresh-manager';
import { logger } from '@/lib/supertokens';
import { ensureSuperTokensFrontend } from '@/lib/supertokens/client';
export function SessionMonitor() {
const lastRefreshTimeRef = useRef<number>(0);
@@ -27,10 +27,13 @@ export function SessionMonitor() {
}
try {
ensureSuperTokensFrontend();
const { doesSessionExist } = await import('supertokens-web-js/recipe/session');
const sessionExists = await doesSessionExist();
if (!sessionExists) {
logger.info('Session monitor: no session exists, redirecting to login');
window.location.href = '/login';
logger.info('Session monitor: no session exists, skipping refresh');
return;
}
@@ -42,17 +45,13 @@ export function SessionMonitor() {
lastRefreshTimeRef.current = Date.now();
logger.info('Session monitor: session refreshed successfully');
} else {
logger.warn('Session monitor: refresh returned false, redirecting to login');
window.location.href = '/login';
logger.warn('Session monitor: refresh returned false');
}
} catch (error) {
logger.error('Session monitor: error refreshing session', error);
window.location.href = '/login';
} catch (error: any) {
logger.error('Session monitor: error refreshing session', error?.message);
}
};
handleVisibilityChange();
document.addEventListener('visibilitychange', handleVisibilityChange);
return () => {

View File

@@ -26,13 +26,34 @@ export const fetchMe = createServerFn()
phone: context.phone
};
} catch (error: any) {
// logger.info("FetchMe: Session error", error)
if (error?.response?.status === 401) {
const errorData = error?.response?.data;
if (errorData?.error === "SESSION_REFRESH_REQUIRED") {
logger.info("FetchMe: Error caught", {
message: error?.message,
isResponse: error instanceof Response,
status: error instanceof Response ? error.status : error?.response?.status
});
if (error instanceof Response) {
const status = error.status;
if (status === 440) {
logger.info("FetchMe: Session refresh required (440)");
throw error;
}
}
if (error?.response?.status === 440 || error?.response?.status === 401) {
const errorData = error?.response?.data;
if (errorData?.error === "SESSION_REFRESH_REQUIRED") {
logger.info("FetchMe: Session refresh required (legacy)");
throw error;
}
}
if (error?.message === "Unauthenticated") {
logger.info("FetchMe: No authenticated user (expected when not logged in)");
return { user: undefined, roles: [], metadata: {}, phone: undefined };
}
logger.warn("FetchMe: Unexpected error, returning default", error);
return { user: undefined, roles: [], metadata: {}, phone: undefined };
}
})

View File

@@ -6,16 +6,19 @@ export async function handleQueryError(error: any): Promise<void> {
throw error;
}
const isSessionExpired =
error?.response?.status === 440 ||
error?.response?.headers?.get?.('X-Session-Expired') === 'true';
if (!error || typeof error !== 'object') {
throw error;
}
if (isSessionExpired) {
if (error instanceof Response) {
const status = error.status;
if (status === 440) {
try {
const errorData = await error.response.json().catch(() => ({}));
const errorData = await error.json();
if (errorData.error === 'SESSION_REFRESH_REQUIRED' && errorData.shouldRetry) {
logger.warn('Query detected SESSION_REFRESH_REQUIRED, initiating redirect');
if (errorData?.error === 'SESSION_REFRESH_REQUIRED' && errorData?.shouldRetry === true) {
logger.warn('Query detected SESSION_REFRESH_REQUIRED (Response), initiating redirect');
const currentUrl = window.location.pathname + window.location.search;
await refreshManager.redirectToRefresh(currentUrl);
@@ -23,23 +26,26 @@ export async function handleQueryError(error: any): Promise<void> {
throw new Error('Redirecting to refresh session');
}
} catch (parseError) {
if (error?.response?.status === 440) {
logger.warn('Session expired (440), redirecting to refresh');
const currentUrl = window.location.pathname + window.location.search;
await refreshManager.redirectToRefresh(currentUrl);
throw new Error('Redirecting to refresh session');
}
}
throw error;
}
if (error?.response?.status === 401) {
const status = error?.response?.status;
if (status === 440) {
try {
const errorData = typeof error.response.data === 'string'
? JSON.parse(error.response.data)
: error.response.data;
let errorData = error?.response?.data;
if (errorData?.error === 'SESSION_REFRESH_REQUIRED') {
logger.warn('Query detected legacy SESSION_REFRESH_REQUIRED (401), initiating redirect');
if (typeof errorData === 'string') {
try {
errorData = JSON.parse(errorData);
} catch {
}
}
if (errorData?.error === 'SESSION_REFRESH_REQUIRED' && errorData?.shouldRetry === true) {
logger.warn('Query detected SESSION_REFRESH_REQUIRED (legacy format), initiating redirect');
const currentUrl = window.location.pathname + window.location.search;
await refreshManager.redirectToRefresh(currentUrl);