mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 23:11:12 -05:00
Fix: Implement iframe-compatible authentication
This commit is contained in:
58
src/lib/authStorage.ts
Normal file
58
src/lib/authStorage.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Custom storage adapter for Supabase authentication that handles iframe localStorage restrictions.
|
||||
* Falls back to sessionStorage or in-memory storage if localStorage is blocked.
|
||||
*/
|
||||
class AuthStorage {
|
||||
private storage: Storage | null = null;
|
||||
private memoryStorage: Map<string, string> = new Map();
|
||||
private storageType: 'localStorage' | 'sessionStorage' | 'memory' = 'memory';
|
||||
|
||||
constructor() {
|
||||
// Try localStorage first
|
||||
try {
|
||||
localStorage.setItem('__supabase_test__', 'test');
|
||||
localStorage.removeItem('__supabase_test__');
|
||||
this.storage = localStorage;
|
||||
this.storageType = 'localStorage';
|
||||
console.log('[AuthStorage] Using localStorage');
|
||||
} catch {
|
||||
// Try sessionStorage as fallback
|
||||
try {
|
||||
sessionStorage.setItem('__supabase_test__', 'test');
|
||||
sessionStorage.removeItem('__supabase_test__');
|
||||
this.storage = sessionStorage;
|
||||
this.storageType = 'sessionStorage';
|
||||
console.log('[AuthStorage] localStorage blocked, using sessionStorage');
|
||||
} catch {
|
||||
// Use in-memory storage as last resort
|
||||
this.storageType = 'memory';
|
||||
console.log('[AuthStorage] Both localStorage and sessionStorage blocked, using in-memory storage');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getItem(key: string): string | null {
|
||||
if (this.storage) {
|
||||
return this.storage.getItem(key);
|
||||
}
|
||||
return this.memoryStorage.get(key) || null;
|
||||
}
|
||||
|
||||
setItem(key: string, value: string): void {
|
||||
if (this.storage) {
|
||||
this.storage.setItem(key, value);
|
||||
} else {
|
||||
this.memoryStorage.set(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
removeItem(key: string): void {
|
||||
if (this.storage) {
|
||||
this.storage.removeItem(key);
|
||||
} else {
|
||||
this.memoryStorage.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const authStorage = new AuthStorage();
|
||||
Reference in New Issue
Block a user