Metoda verifyIdToken nie istnieje w typie Auth za pomocą getAuth z firebase/auth

0

Pytanie

Staram się podążać podany tutaj przykład, gdzie przedstawia poniższy przykład sprawdzania identyfikacyjnego token:

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

Mój kod wygląda tak:

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));
            });

Ale ja ciągle się

Właściwość 'verifyIdToken' nie istnieje dla typu 'Auth'

Mam najnowsza wersja pakietu firebase, który, jak przypuszczam, jest używany w przykładzie w dokumentach, biorąc pod uwagę, że on używa getAuthtak , że nie mogę powiedzieć, co robię nie tak. Poza tym, staram się unikać mieszania firebase-admin i firebase, nie jestem pewien, czy to jest słuszne, ale jeśli miesza je, wydaje mi się, że nie mogę uniknąć konieczności zainicjować zbyt duże okazy aplikacji.

Dziękuję za każdą pomoc!

1

Najlepsza odpowiedź

1

Mylisz SDK administratora i klienta SDK.

Dokumentacja, którą jesteś związany, jest przeznaczona tylko dla SDK administratora. Zwróć uwagę, jak to jest zorganizowane w dziale dla administratora. On nigdzie nie używa getAuth na tej stronie. Pakiet SDK administratora jest inicjowana zupełnie inaczej, niż klienta pakiet SDK, i on w ogóle nie działa w przeglądarkach. To działa tylko na bezpiecznych бэкенах.

W używanym przez ciebie klienta SDK nie ma funkcji sprawdzania tokenów. To dla chronionych бэкендов, korzystających tylko SDK Adminn.

2021-11-24 02:14:48

Tak, czułem to. Dziękuję. Tak więc, dla wewnętrznego API muszę korzystać tylko z SDK administratora?
Lux

Jest to typowy przypadek. Client SDK jest przeznaczony tylko do tworzenia i logowania użytkowników do państwa stron internetowych /aplikacji mobilnych.
Doug Stevenson

W innych językach

Ta strona jest w innych językach

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