簡體   English   中英

如何檢查 Firebase 用戶最近是否登錄了 Flutter 應用程序

[英]How to check if the Firebase user has recently signed in in a Flutter app

我需要實現 function ,我的應用程序中的 Firebase 用戶可以刪除他/她的帳戶,如果他/她願意。 下面是 Firebase 從 Flutter 中刪除帳戶 function:

try {
  await FirebaseAuth.instance.currentUser!.delete();
} on FirebaseAuthException catch (e) {
  if (e.code == 'requires-recent-login') {
    print('The user must reauthenticate before this operation can be executed.');
  }
}

在某些情況下,可能會發生用戶很久以前登錄的情況,這會導致 'requires-recent-login' 的異常。

這是我在應用程序中的實際實現:

  Future<String> deleteUserDataFromDatabase() async {
    try {
      // First, delete the user profile from DB
      await _firestore
          .collection('app_users')
          .doc(_auth!.currentUser!.uid)
          .delete();
  // Lastly, delete the Authentication profile
  User? user = _auth!.currentUser;
  await user!.delete();
} on Exception catch (e) {
  //print(e);
  return Future.value(e.toString());
}

return Future.value('SUCCESS');
  }
} 

如您所見,在使用delete() function 刪除用戶之前,我首先從 Firestore DB 中刪除用戶配置文件數據。 我需要這樣做,因為我設置了這樣的安全規則,即用戶本身是唯一可以刪除數據庫中他/她的個人資料信息的人,而不是其他任何人..

如果用戶最近登錄過,沒有問題,一切順利。 但是,如果用戶最近沒有登錄,則從 DB 中刪除用戶配置文件信息,但不會刪除Firebase 身份驗證用戶帳戶

不能先刪除Firebase賬號,再刪除用戶資料信息_auth..currentUser! 運行await user.;delete(); .

我該如何克服這個問題? 如果您有建議,我將不勝感激代碼示例而不是理論答案。

在 flutter 中,有沒有辦法檢測 Firebase 用戶最近是否登錄過? 如果能夠檢測到它,那就太好了。

此外,即使用戶最近沒有登錄,是否有辦法強制刪除用戶帳戶?

火力基地在這里

確切的時間由服務器確定,故意沒有記錄,並且可以隨時更改。 在這種情況下,無法強制刪除(或其他敏感操作),因為這是故意阻止此類操作,直到確認用戶身份為止。

正如其他人評論的那樣,正確的流程是嘗試刪除用戶,然后處理您收到的錯誤。

對於數據庫流,您有幾個選項:

  • 將文檔標記為待刪除(為此目的寫入特定字段值),然后在刪除用戶帳戶后將其永久刪除。
  • 定期運行清理腳本以檢查所有文檔以查看用戶是否仍然存在,或者僅檢查在先前方法中標記為待刪除的文檔。
  • 使用在帳戶刪除時自動觸發的onDelete Cloud Function
  • 在 Cloud Function 中運行刪除文檔和帳戶的整個操作,它不必遵守新近要求(因為它是受信任的環境)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM