2016-10-28 50 views
0

According to the docs某些操作(如刪除用戶)需要用戶最近登錄。如果用戶最近登錄了,如何在之前知道firebase.auth().currentUser返回的對象中是否有任何內容指示最近用戶是否登錄?如何檢測用戶是否最近登錄?

編輯:爲了進一步解釋,用戶可以登錄並且firebase.auth().currentUser可以返回有效的用戶數據,但是用戶可能在某個時間段之前已經登錄(我不是那個確切的)這標誌該用戶爲「沒有簽署最近」,因此使用user.reauthenticate(credential)

+0

是的,它返回當前登錄的用戶 –

+0

事情是Firebase身份驗證後端可以隨意更改該持續時間。推薦的方法是捕獲該特定錯誤,並在發生此情況時呼叫用戶重新進行身份驗證。 – bojeil

+0

@bojeil我以某種方式認爲像user.recentlySignedIn()這樣的調用會比知道用戶最近沒有對像delete這樣的調用發生錯誤進行簽名要好。例如,在刪除之前,可能希望在別處做一些清理工作。 –

回答

0

推薦的方式來獲得當前用戶是通過在設置觀察員 無法執行某些操作(見上文),而無需重新認證身份驗證對象:

https://firebase.google.com/docs/auth/web/manage-users#get_the_currently_signed-in_user

您可以觀察用戶狀態。當他登錄/註銷時,您會收到通知。

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // User has recently signed in. 
    } else { 
    // No user has recently signed out. 
    } 
}); 
+0

非常感謝,但當前登錄的用戶最近也不能登錄。:-)檢查我的問題中鏈接的文檔。 –

1

好像與火力地堡用戶一個很好的做法是使用的登錄和基本信息(供應商等)的驗證類,那麼存儲實際的用戶數據,通過user ID,在一個單獨的Users表。我們在我們的中型應用程序和商店信息中使用了此設置,如last_logged_in,updated_atcreated_at。這個附加的好處是你可以像在this answer一樣查詢它。

這肯定會允許您查詢用戶的last_logged_in以確定他們是否最近登錄過。

+0

以這種方式將數據庫與Auth連接起來似乎有點奇怪。另外,你怎麼知道什麼時間框架被認爲是「最近」? –

+0

我只是想把它當作一段感情。它對我們很好,但是YMMV。至於「最近」的時間表,我不知道那是什麼,並且覺得文件沒有說出來很奇怪,但那不是真正的原始問題。 – imjared