語境
我正在嘗試在我自己的后端服務器上使用 Firebase 和我自己的 MongodDB 資料庫。我目前將用戶資料存盤在 MongoDB 上,因此每個用戶都有自己的唯一ObjectId性,它可以方便地用作用戶的 UID。
ObjectId因此,我計劃使用用戶在 Firebase 存盤上存盤檔案,例如顯示圖片:
Firebase Storage
|
-- display-pictures
| |
| -- userObjectId1.png
| |
| -- userObjectId2.png
|
-- videos
| |
| -- postObjectId1.mp4
| |
| -- postObjectId2.mp4
|
-- thumbnails
但是,這意味著用戶只要知道自己的 ObjectId,就可以洗掉或覆寫其他用戶的內容。據我所知,通常情況下,人們會使用用戶的 ID 來構建內容,以便可以應用 Firebase 安全規則來防止修改其他用戶的內容:
Firebase Storage
|
-- userObjectId1
| |
| -- display-picture.png
| |
| -- posts
| |
| -- postObjectId1
| |
| -- video.mp4
| |
| -- thumbnail.png
|
-- userObjectId2
|
-- display-picture.png
|
-- posts
|
-- postObjectId2
|
-- video.mp4
|
-- thumbnail.png
這將允許像這樣的安全規則:
service firebase.storage {
// Only a user can upload their file, but anyone can view it
match /{userId}/{fileName} {
allow read;
allow write: if request.auth != null && request.auth.uid == userId;
}
}
但是,就我而言,由于 Firebase 不知道我服務器上 MongoDB 中的 ObjectId,我實際上無法執行此操作。
問題
這里的最佳做法是什么?我是否應該使用 Firebase Admin SDK 從我的后端服務器創建 Firebase Auth 用戶,并設定自定義 UID(使用 MongoDB 檔案的 ObjectId)?像這樣設定自定義 UID 有什么缺點嗎?
還是將所有可能造成損壞的 Firebase 存盤互動(例如洗掉可能覆寫資料的內容或操作)路由到我的后端服務器是否更好?
或者我應該使用 Firebase Auth UID 作為主要且唯一的用戶 ID,而不是 MongoDB ObjectId(問題是,當我從自己的身份驗證和存盤系統遷移到 Firebase 時,當前用戶沒有Firebase UID;我無法代表他們創建 Firebase 組態檔,因為我不存盤他們的原始密碼,因此無法進行完整遷移......)?
第一個選項似乎是最簡單的,但我不確定我應該考慮哪些其他因素。
謝謝。
uj5u.com熱心網友回復:
由于 Firebase 不知道我服務器上 MongoDB 中的 ObjectId
Firebase 讓您在使用 Admin SDK 創建用戶時設定自定義用戶 ID 。您可以添加一個 API 端點,在 MongoDB 中添加用戶檔案并使用在 Firebase 中/register新生成的用戶創建用戶。_id例如:
const { insertedId } = await collection.insertOne(doc);
await getAuth().createUser({ uid: insertedId })
這樣,您仍然request.auth.uid可以像_id在 MongoDB 中一樣輕松使用安全規則的所有功能。
這里的最佳做法是什么?我是否應該使用 Firebase Admin SDK 從我的后端服務器創建 Firebase Auth 用戶,并設定自定義 UID(使用 MongoDB 檔案的 ObjectId)?像這樣設定自定義 UID 有什么缺點嗎?
我更喜歡在所有地方使用相同的 UID,并且使用自定義 UID 沒有缺點。當您將用戶從舊服務器匯入 Firebase 但希望保留舊 UID 時,該功能非常有用。
如果您不想將 ObjectID 用作 Firebase UID,則始終可以將 Firebase Auth 的 UID 作為單獨的欄位存盤在 MongoDB 檔案中。您不能將該 UID 存盤在_id(ObjectID) 中,因為它不是 24 個字符的十六進制字串。
此外(但不是必需的),您可以從客戶端禁用注冊,以防止任何人直接使用 Client SDK 創建用戶帳戶(這將生成隨機 UID)。結帳如何在 Firebase 中禁用注冊?(需要身份平臺)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515533.html
標籤:Google Cloud Collective mongodb火力基地安全firebase 身份验证firebase-存储
上一篇:在Membership.ValidateUser(stringuserName,stringpassword)中使用SecureString
