Properly handle expired ID token cookie, be robust to errors

This commit is contained in:
Marshall Polaris 2022-07-19 20:06:30 -07:00
parent 6d3490cd68
commit f8b4f8ee59

View File

@ -52,12 +52,19 @@ export const getServerAuthenticatedUid = async (ctx: RequestContext) => {
if (idToken != null) { if (idToken != null) {
try { try {
return (await auth.verifyIdToken(idToken))?.uid return (await auth.verifyIdToken(idToken))?.uid
} catch {
// plausibly expired; try the refresh token, if it's present
}
}
if (refreshToken != null) {
try {
const resp = await requestFirebaseIdToken(refreshToken)
setAuthCookies(resp.id_token, resp.refresh_token, ctx.res)
return (await auth.verifyIdToken(resp.id_token))?.uid
} catch (e) { } catch (e) {
if (refreshToken != null) { // this is a big unexpected problem -- either their cookies are corrupt
const resp = await requestFirebaseIdToken(refreshToken) // or the refresh token API is down. functionally, they are not logged in
setAuthCookies(resp.id_token, resp.refresh_token, ctx.res) console.error(e)
return (await auth.verifyIdToken(resp.id_token))?.uid
}
} }
} }
return undefined return undefined