我正在嘗試按照此處給出的示例進行操作,其中顯示了以下示例來驗證 ID 令牌:
// idToken comes from the client app
getAuth()
.verifyIdToken(idToken)
.then((decodedToken) => {
const uid = decodedToken.uid;
// ...
})
.catch((error) => {
// Handle error
});
我的代碼如下所示:
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));
});
但我不斷得到
型別“Auth”上不存在屬性“verifyIdToken”
我有最新版本的 firebase 包,我假設檔案給出的示例正在使用考慮到它使用getAuth,所以無法判斷我做錯了什么。此外,我試圖避免混合 firebase-admin 和 firebase,不確定這是否正確,但如果我混合它們,我似乎無法避免必須初始化太 App 實體。
謝謝你的幫助!
uj5u.com熱心網友回復:
您正在混淆 Admin SDK 和客戶端 SDK。
您鏈接的檔案僅適用于 Admin SDK。請注意它在 Admin 部分的組織方式。它沒有在該頁面的任何地方使用 getAuth。Admin SDK 的初始化與客戶端 SDK 完全不同,它在瀏覽器中根本不起作用。它僅在安全后端上運行。
您使用的客戶端 SDK 沒有驗證令牌的功能。這適用于僅使用 Adminn SDK 的安全后端。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366003.html
標籤:javascript 火力基地 Firebase 身份验证
