2017-05-25 22 views
-2

Firebase在APPDelegate中配置。Firebase在訪問一次後才能觀察到

規則中的讀取設置爲.true

但是,在用戶登錄到我的應用程序之前,我正在檢查我的Firebase數據庫的單獨表中的用戶名。它會完全跳過觀察塊,直到我強制登錄到另一個已創建的我的帳戶。然後當我重新構建應用程序時,塊不再被跳過,並且實際訪問表。

當我在新設備上運行應用程序時,如何「喚醒」Firebase,以便我可以檢查用戶名,而無需事先使用現有帳戶登錄應用程序?

回答

2

您可能想重新考慮應用程序的結構。

如果您在進行身份驗證之前檢查用戶名,這意味着該節點已公開,任何人都可以獲取所有用戶名的副本。很明顯,這本身並不是一個大問題,但如果你的用戶決定使用電子郵件,那麼抓住名單的人有一個即時列表,他們可以發送垃圾郵件。

當您將任意觀察者添加到節點時,只要添加觀察者,該節點就會被讀取一次。當您啓動應用程序時,您可以使用.childAdded來遍歷現有節點以預加載一些數據,例如購物清單,然後在此之後添加的任何新grocie會通過事件發送給您的應用程序。

同樣,一個.value事件將在整個節點中讀取,併爲未來事件留下附加的觀察者以用於任何

用戶名問題很棘手,您現在的做法現在可能會長期困擾您。

一個更好的辦法是利用Firebase Authentication.

火力地堡處理所有的用戶名和密碼的爲您服務。它非常強大和靈活,可以避免遇到的問題。它會通知您是否存在用戶名,它會執行密碼重置電子郵件,並且您可以通過Firebase控制檯管理用戶。這是要走的路。

如果你想添加的用戶名功能,它可以通過添加一個用戶名或暱稱節點到/用戶節點

/users 
    uid_0 
    email: "[email protected]" 
    username: "bill_the_cat" 
    uid_1 
    email: "[email protected]" 
    username: "superman" 

一旦用戶進行身份驗證使用火力地堡身份驗證很容易做到,從那裏提出任何時間用戶信息需要顯示在應用程序中,只需查找您需要的uid(uid_1)並獲取用戶名節點(超人)進行顯示即可。

+0

我使用firebase身份驗證。但我想我也試圖在使用電子郵件進行身份驗證之前添加用戶名功能。 「這輸入的用戶名與表中的電子郵件相匹配,然後用它進行身份驗證」是否有任何方法可以將唯一用戶名作爲屬性添加到Firebase Auth? –

+0

@NashEquilibrium不,您無法爲Firebase用戶存儲添加隨機屬性,並且可以非常輕鬆地添加用戶名功能。這會在用戶通過Firebase身份驗證進行身份驗證後發生。您可以將其視爲用戶的「暱稱」,用戶可以通過暱稱而不是他們的身份驗證電子郵件與對方進行交互。我在回答中加入了一個簡短的提示,給你一個出發點。你也可以利用一些用戶屬性,例如displayName,但對於這個用例,我認爲用戶名節點是要走的路。 – Jay

+0

如果只有在註冊期間有辦法做到這一點!哈哈。沒關係。非常感謝你幫助Jay。 –

相關問題