next-firebase-auth-edge
Version:
Next.js Firebase Authentication for Edge and server runtimes. Compatible with latest Next.js features.
36 lines (35 loc) • 1.26 kB
JavaScript
import { errors } from 'jose';
import { InvalidTokenError, InvalidTokenReason } from '../../../auth/error.js';
import { RotatingCredential } from '../../../auth/rotating-credential.js';
export class SingleCookieParser {
cookies;
cookieName;
signatureKeys;
constructor(cookies, cookieName, signatureKeys) {
this.cookies = cookies;
this.cookieName = cookieName;
this.signatureKeys = signatureKeys;
}
async parseCookies() {
const jwtCookie = this.cookies.get(this.cookieName);
if (!jwtCookie) {
throw new InvalidTokenError(InvalidTokenReason.MISSING_CREDENTIALS);
}
const credential = new RotatingCredential(this.signatureKeys);
try {
const result = await credential.verify(jwtCookie);
return {
idToken: result.id_token,
refreshToken: result.refresh_token,
customToken: result.custom_token,
metadata: (result.metadata ?? {})
};
}
catch (e) {
if (e instanceof errors.JWSSignatureVerificationFailed) {
throw new InvalidTokenError(InvalidTokenReason.INVALID_SIGNATURE);
}
throw e;
}
}
}