fix: Mobile login redirects to homepage without showing Auth0 login page (#188) #193

Merged
egullickson merged 9 commits from issue-188-fix-mobile-login-redirect into main 2026-02-15 15:36:38 +00:00
2 changed files with 31 additions and 13 deletions
Showing only changes of commit da59168d7b - Show all commits

View File

@@ -496,6 +496,16 @@ function App() {
const isAuthRoute = isSignupRoute || isVerifyEmailRoute || isOnboardingRoute;
const shouldShowHomePage = !isGarageRoute && !isCallbackRoute && !isAuthRoute;
const [callbackTimedOut, setCallbackTimedOut] = useState(false);
useEffect(() => {
if (isCallbackRoute && !isAuthenticated && !isLoading) {
const timer = setTimeout(() => setCallbackTimedOut(true), 10000);
return () => clearTimeout(timer);
}
setCallbackTimedOut(false);
return undefined;
}, [isCallbackRoute, isAuthenticated, isLoading]);
// Enhanced navigation handlers for mobile
const handleVehicleSelect = useCallback((vehicle: Vehicle) => {
setSelectedVehicle(vehicle);
@@ -572,6 +582,9 @@ function App() {
</ThemeProvider>
);
}
if (callbackTimedOut) {
return <Navigate to="/" replace />;
}
if (mobileMode) {
return (
<ThemeProvider>

View File

@@ -71,25 +71,27 @@ class IndexedDBStorage implements StorageAdapter, Auth0Cache {
return new Promise((resolve) => {
const transaction = this.db!.transaction([this.storeName], 'readonly');
const store = transaction.objectStore(this.storeName);
const request = store.getAll();
const request = store.openCursor();
this.memoryCache.clear();
request.onsuccess = () => {
const results = request.result;
this.memoryCache.clear();
for (const item of results) {
if (item.key && typeof item.value === 'string') {
this.memoryCache.set(item.key, item.value);
const cursor = request.result;
if (cursor) {
const key = cursor.key as string;
const value = cursor.value;
if (typeof key === 'string' && typeof value === 'string') {
this.memoryCache.set(key, value);
}
cursor.continue();
} else {
console.log(`[IndexedDB] Loaded ${this.memoryCache.size} items into cache`);
resolve();
}
console.log(`[IndexedDB] Loaded ${this.memoryCache.size} items into cache`);
resolve();
};
request.onerror = () => {
console.warn('[IndexedDB] Failed to load cache from DB:', request.error);
resolve(); // Don't fail initialization
resolve();
};
});
}
@@ -199,12 +201,15 @@ class IndexedDBStorage implements StorageAdapter, Auth0Cache {
async set(key: string, value: any): Promise<void> {
await this.initPromise;
this.setItem(key, JSON.stringify(value));
const stringValue = JSON.stringify(value);
this.memoryCache.set(key, stringValue);
await this.persistToDB(key, stringValue);
}
async remove(key: string): Promise<void> {
await this.initPromise;
this.removeItem(key);
this.memoryCache.delete(key);
await this.persistToDB(key, null);
}
// Additional methods for enhanced functionality