VerifyIdToken méthode n'existe pas dans le type d'Authentification à l'aide de getAuth de firebase/auth

0

La question

Je suis en train de suivre l'exemple donné ici, où il montre l'exemple suivant pour vérifier un ID de jeton:

// idToken comes from the client app
getAuth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((error) => {
    // Handle error
  });

Mon code ressemble à ceci:

function createFirebaseAdminApp(config: AppOptions) {
    if (getApps().length === 0) {
        return initializeApp(config);
    } else {
        return getApp();
    }
}

const options: AppOptions  = {
    credential: cert({
        projectId: process.env.FIREBASE_PROJECT_ID,
        clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
        privateKey:
            process.env.FIREBASE_PRIVATE_KEY != undefined
                ? process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, "\n")
                : "",
    }),
    databaseURL: process.env.FIREBASE_DATABASE_URL,
};


const firebaseAdmin = createFirebaseAdminApp(options) as FirebaseApp;
const adminAuth = getAuth(firebaseAdmin);
adminAuth
    .verifyIdToken(token)
    .then((decodedToken) => {
        res.locals.decodedToken = decodedToken;
        next();
    })
            .catch(() => {
                next(new HttpError("Invalid token provided", 403));
            });

Mais je continue à recevoir des

La propriété 'verifyIdToken" n'existe pas sur le type 'Auth'

J'ai la dernière version de la firebase colis, je suppose que l'exemple donné par la doc est en utilisant considérant qu'il utilise getAuth, ne peut donc pas dire ce que je fais mal. Aussi j'essaie d'éviter de mélanger des firebase-admin et firebase, vous ne savez pas si cela est correct, mais si j'ai mélangé eux je n'arrive pas à éviter d'avoir à initialiser trop App instances.

Merci pour toute aide!

1

La meilleure réponse

1

Vous mélangez l'Admin SDK et le client SDK.

La documentation liée est pour l'Admin SDK seulement. Remarquez comment il est organisé dans la section Admin. Il n'est pas à l'aide de getAuth n'importe où dans la page. L'Admin kit de développement est initialisé de façon totalement différente que le client SDK, et il ne fonctionne pas à tous les navigateurs. Il fonctionne sur la sécurité backens seulement.

Le client SDK que vous utilisez ne possède pas de fonction pour vérifier les jetons. C'est pour sécuriser les backends uniquement à l'aide de la Adminn SDK.

2021-11-24 02:14:48

Oui, je m'en doutais. Je vous remercie. Donc, pour un backend API devrais-je utiliser seulement l'Admin SDK?
Lux

C'est généralement le cas. Le client SDK est vraiment seulement pour la création et la signature dans les utilisateurs de votre site web/application mobile.
Doug Stevenson

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................