如何保護firebase云功能HTTP端點僅允許Firebase經過身份驗證的用戶?使用新的firebase云功能,我決定將我的一些HTTP端點移動到firebase。一切都很好......但我有以下問題。我有兩個端點由HTTP觸發器(云功能)構建用于創建用戶并返回Firebase Admin SDK生成的自定義令牌的API端點。用于獲取特定用戶詳細信息的API端點。雖然第一個端點很好,但對于我的第二個端點,我希望僅為經過身份驗證的用戶保護它。意思是擁有我之前生成的令牌的人。我該如何解決這個問題?我知道我們可以使用云函數獲取Header參數request.get('x-myheader')但有沒有辦法保護端點就像保護實時數據庫一樣?
3 回答

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
正如@Doug所提到的,您可以firebase-admin
用來驗證令牌。我已經建立了一個簡單的例子:
exports.auth = functions.https.onRequest((req, res) => { cors(req, res, () => { const tokenId = req.get('Authorization').split('Bearer ')[1]; return admin.auth().verifyIdToken(tokenId) .then((decoded) => res.status(200).send(decoded)) .catch((err) => res.status(401).send(err)); });});
在上面的例子中,我也啟用了CORS,但這是可選的。首先,你得到Authorization
標題并找出答案token
。
然后,您可以firebase-admin
用來驗證該令牌。您將在響應中獲得該用戶的已解碼信息。否則,如果令牌無效,則會拋出錯誤。
我希望它有所幫助。

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
正如@Doug所提到的,您可以使用可調用函數來從客戶端和服務器中排除一些樣板代碼。
Exampale可調用函數:
export const getData = functions.https.onCall((data, context) => { // verify Firebase Auth ID token if (!context.auth) { return { message: 'Authentication Required!', code: 401 }; } // do your things.. const uid = context.auth.uid; const query = data.query; return { message: 'Some Data', code: 400 };});
它可以直接從您的客戶端調用,如下所示:
firebase.functions().httpsCallable('getData')({query}).then(result => console.log(result));
添加回答
舉報
0/150
提交
取消