'supabase.auth.onAuthStateChange Not Working when React app is in iframe
I am using Supabase user authentication in a React app hosted at https://example.com that is running inside an iframe injected by a Chrome extension chrome-sidebar when the browser is on a different domain/website https://google.com.
By adding console.log calls into the React app and observing for them, I notice that the React effect is run once as expected, but supabase.auth.onAuthStateChange is never fired when the user logs in successfully.
function App() {
const [session, setSession] = useState(null);
useEffect(() => {
setSession(supabase.auth.session());
console.log("session:", session);
supabase.auth.onAuthStateChange((_event, session) => {
console.log("supabase.auth.onAuthStateChange"); // THIS DOES NOT RUN WHEN USER LOGS IN
setSession(session);
});
}, []);
...
❌ Browser at https://google.com, iframe at https://example.com:
sessionisnullwhenuseEffectfirst runs, as expected since the user is not logged in yetsupabase.auth.onAuthStateChangenever runs on user loginsupabase.auth.tokenis not found in Local Storage on user login
However, if we also run the React app directly by navigating a Chrome browser to https://example.com, everything works as expected:
✅ Browser at https://example.com, no iframe:
supabase.auth.onAuthStateChangefires and prints theconsole.logmessage- The session data is stored in
Storage > Local Storage > https://example.comunder the keysupabase.auth.token
How can we get supabase.auth.onAuthStateChange to work when the React app is inside an iframe?
✅ Browser and Iframe both at https://example.com:
Both browser and iframe works as expected!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
