在服務器端使用firebase-admin
, 我需要從Firebase身份驗證中獲取用戶數據。 但我發現如果我使用firebase提供的jwt令牌, 我無法從解碼令牌獲取電子郵件或其他提供者的數據。 (很確定我已經正確添加了特定範圍)。firebase-admin auth在調用`getUser`時出錯,但在調用verifyToken時工作正常
然後我轉向使用firebase admin api從Firebase的身份驗證中獲取用戶數據。
的代碼如下所示:
import * as admin from 'firebase-admin'
const auth = admin.auth()
auth.verifyIdToken(idToken)
.then(decodedToken => decodedToken.user_id)
.then(uid => {
auth.getUser(user_id)
.then((userRecord) => {
console.log("Successfully fetched user data:", userRecord.json();
})
.catch(function(error) {
console.log("Error fetching user data:", error);
});
})
然後,我得到了一個錯誤:
Error fetching user data: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Error (native)
at Sign.sign (crypto.js:283:26)
at Object.sign (~/app/node_modules/jwa/index.js:55:45)
at Object.jwsSign [as sign] (~/app/node_modules/jws/lib/sign-stream.js:23:24)
at Object.module.exports [as sign] (~/app/node_modules/firebase-admin/node_modules/jsonwebtoken/sign.js:144:16)
at CertCredential.createAuthJwt_ (~/app/node_modules/firebase-admin/lib/auth/credential.js:190:20)
at CertCredential.getAccessToken (~/app/node_modules/firebase-admin/lib/auth/credential.js:162:26)
at SignedApiRequestHandler.sendRequest (~/app/node_modules/firebase-admin/lib/utils/api-request.js:110:32)
at ~/app/node_modules/firebase-admin/lib/auth/auth-api-request.js:381:50
at process._tickDomainCallback (internal/process/next_tick.js:129:7)
這可能是根據這個猜測權限錯誤, ,我發現,這可能是與此問題在計算器上:
Firebase admin().auth().getUser(uid) Error: An internal error has occurred 'auth/internal-error'
但即使我將管理客戶端的IAM更改爲role:editor, 這個錯誤仍然發生。 想知道發生了什麼, 和爲什麼管理員可以驗證令牌,但可以授予讀取用戶數據(即使我給服務帳戶根訪問我的項目)。
任何建議對我都有幫助。
您提供的代碼示例有一堆語法和代碼錯誤,這些錯誤使我很難再現。例如,你永遠不會調用initializeApp()。您還使用未定義的'idtoken'和'user_id'變量。最後,你的第一個'console.log()'行缺少一個右括號。你可以把一個完整的repro放在一起來幫助我們調試嗎?請參閱下面的答案,瞭解如何最輕鬆地解決您的問題。如果這不起作用,請嘗試升級到最新版本的SDK(4.0.6),該SDK有一些新的錯誤處理。另外,知道你在哪裏得到了無效的密鑰文件會很好。 – jwngr