Symptom: the Google sign-in popup opens, flashes, closes. The page shows "Google sign-in failed. Try again." Nothing appears in the browser console or the network tab.
Cause: the app is served from drb.cusano.net, but signInWithPopup opens its handler on discord-radio-bot-461301.firebaseapp.com. Chrome partitions third-party storage, so the popup cannot read back the state its opener wrote. Visiting the handler directly confirms it: "missing initial state ... a storage-partitioned browser environment".
Nothing was wrong with authorised domains or the build. The shipped bundle carries the correct apiKey and authDomain, which is exactly what made this look like a code bug.
Fix — all three parts are required or nothing changes:
Caddy proxies /__/auth/* to the Firebase Hosting origin. DONE in the Caddyfile template, but needs an ansible-playbook run to deploy (CI does not deploy templates).
CI secret FIREBASE_AUTH_DOMAIN must become drb.cusano.net, then the frontend rebuilt.
drb.cusano.net must be listed in the Firebase console's authorised domains.
Parts 2 and 3 are outstanding.
Separately, app/login/page.tsx swallowed the Firebase error entirely (} catch {), which is why nothing showed in the console and why this took so long to identify. That has been fixed.
**Symptom:** the Google sign-in popup opens, flashes, closes. The page shows "Google sign-in failed. Try again." Nothing appears in the browser console or the network tab.
**Cause:** the app is served from `drb.cusano.net`, but `signInWithPopup` opens its handler on `discord-radio-bot-461301.firebaseapp.com`. Chrome partitions third-party storage, so the popup cannot read back the state its opener wrote. Visiting the handler directly confirms it: *"missing initial state ... a storage-partitioned browser environment"*.
Nothing was wrong with authorised domains or the build. The shipped bundle carries the correct `apiKey` and `authDomain`, which is exactly what made this look like a code bug.
**Fix — all three parts are required or nothing changes:**
1. Caddy proxies `/__/auth/*` to the Firebase Hosting origin. DONE in the Caddyfile template, but needs an `ansible-playbook` run to deploy (CI does not deploy templates).
2. CI secret `FIREBASE_AUTH_DOMAIN` must become `drb.cusano.net`, then the frontend rebuilt.
3. `drb.cusano.net` must be listed in the Firebase console's authorised domains.
Parts 2 and 3 are outstanding.
Separately, `app/login/page.tsx` swallowed the Firebase error entirely (`} catch {`), which is why nothing showed in the console and why this took so long to identify. That has been fixed.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Symptom: the Google sign-in popup opens, flashes, closes. The page shows "Google sign-in failed. Try again." Nothing appears in the browser console or the network tab.
Cause: the app is served from
drb.cusano.net, butsignInWithPopupopens its handler ondiscord-radio-bot-461301.firebaseapp.com. Chrome partitions third-party storage, so the popup cannot read back the state its opener wrote. Visiting the handler directly confirms it: "missing initial state ... a storage-partitioned browser environment".Nothing was wrong with authorised domains or the build. The shipped bundle carries the correct
apiKeyandauthDomain, which is exactly what made this look like a code bug.Fix — all three parts are required or nothing changes:
/__/auth/*to the Firebase Hosting origin. DONE in the Caddyfile template, but needs anansible-playbookrun to deploy (CI does not deploy templates).FIREBASE_AUTH_DOMAINmust becomedrb.cusano.net, then the frontend rebuilt.drb.cusano.netmust be listed in the Firebase console's authorised domains.Parts 2 and 3 are outstanding.
Separately,
app/login/page.tsxswallowed the Firebase error entirely (} catch {), which is why nothing showed in the console and why this took so long to identify. That has been fixed.logan referenced this issue2026-09-07 23:33:51 -04:00