在將新用戶添加到 Firebase 身份驗證之前,應首先限定名稱:
- 名稱不能為空
- 名稱不能為空
- 名稱必須至少包含一個 D 字符
例子:
"Frank van Puffelen" => 這是不可接受的,因為沒有 D 字符
“道格·史蒂文森” => 可以接受
"Alex Mamo" => 不可接受,因為沒有 D 字符
"Renaud Tarnec" => 可以接受
"" => 不可接受,因為它是空值
NULL => 這是不可接受的,因為它是一個空值
在客戶端添加新用戶之前,我會檢查名稱是否遵循上述限定符,但問題是是否有人修改了代碼。
客戶端不安全,我應該在服務器端再次檢查名稱是否符合規則。
所以問題是為什么 Firebase 身份驗證中沒有規則選項卡?
uj5u.com熱心網友回復:
由于您想檢查用戶名(displayName
我猜)是否遵循問題頂部列出的一組約束,您可以利用新的阻塞云函式“讓您執行修改用戶結果的自定義代碼登錄您的應用程式”。
例如:
exports.checkDisplayName = functions.auth.user().beforeCreate((user, context) => {
if (!user.displayName || !user.displayName.toUpperCase().includes('D')) {
throw new functions.auth.HttpsError(
'invalid-argument', `displayName is invalid`); // adapt as follows
}
});
檔案特定部分中的更多詳細資訊,特別是關于如何在前端捕獲和處理錯誤的資訊。
uj5u.com熱心網友回復:
安全規則概念用于防止未經授權訪問您的Firebase 資源,例如資料庫和存盤。displayName
無論您選擇哪種身份驗證方法,該屬性都是可選的。
如果您要求用戶擁有一個,displayName
那么您可以:
檢查用戶是否
displayName
在每次登錄時設定。如果沒有,則將他們重定向到可以設定名稱的螢屏。直接從 Firebase 客戶端 SDK禁用注冊,并使用Firebase Cloud Functions和Admin SDK來創建用戶。沒有其他人可以對功能代碼進行逆向工程,因此服務器端的驗證將確保用戶擁有
displayName
.
exports.createUser = functions.https.onCall((data, context) => {
const { displayName, email, password } = data;
// check if displayName is valid
// if not return error
// create user using Admin SDK if all data provided is valid
return { message: "User created" };
});
然后您可以使用客戶端 SDK 登錄您的用戶signInWithEmailAndPassword()
如果您使用任何 Auth 提供程式,例如 Google、Facebook 并且顯示名稱由于某種原因不可用,那么您將需要一些自定義邏輯,如上面方法 1 中所述。
任何一種解決方案都不會阻止用戶使用updateProfile()
API,因此請確保在客戶端也進行一些驗證,并在資料庫中可以監控的某個位置報告此類事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505214.html
標籤:Google Cloud Collective 火力基地 firebase 身份验证