簡體   English   中英

如何從 angular 中的 firebase 中刪除經過身份驗證的用戶

[英]How to delete authenticated user from firebase in angular

當單擊一個按鈕時,我調用了 function,

onDelete(id:string){ this.db.collection('Students').doc(id).delete(); }

這里,id 是我要刪除的文檔的名稱,db 是 AngularFireStore 類型的屬性,'Students' 是集合的名稱。

文檔結構:在此處輸入圖片描述在上圖中,集合名稱為Students,在該集合名稱下存在多個文檔,因為文檔名稱必須是唯一的,所以我給該名稱指定了一個數字類型的字符串作為id。 在每個文檔中,都有 email 字段,當我刪除同一個文檔時,我想從身份驗證中刪除 email。

注冊用戶的代碼:

this.afAuth.auth.createUserWithEmailAndPassword(email:string,password:string).then(res=>{})

如果要刪除 Firebase 身份驗證中存在的用戶,您有兩種可能性:

1/ 使用 JavaScript SDK (因為您的應用程序是用角度制作的)

您調用delete()方法,如下所示:

const user = firebase.auth().currentUser;
user.delete()
.then(() => {
   //....
})
.catch(err => {
  if (err.code === "auth/requires-recent-login") {
     //Re-authenticate the user 
  } else {
     //....
  }
})

但是請注意,此方法“要求用戶最近登錄。如果不滿足此要求,請要求用戶再次進行身份驗證,然后調用firebase.User.reauthenticateWithCredential ”。 auth/requires-recent-login代碼的錯誤是“如果用戶的最后一次登錄時間未達到安全閾值,則拋出”。

因此,只有登錄用戶才能從前端調用此方法,以刪除他/她自己的帳戶。

2/ 使用管理員 SDK

您可以使用 Admin SDK 的deleteUser()方法,例如在 Cloud Function 中。

在這種情況下,不需要讓用戶登錄,因為這是在后端執行的,因此可以刪除任何用戶。

例如,您可能有一個由管理員用戶觸發的Callable Cloud Function

另一種可能性是在 Firestore 用戶的文檔刪除時觸發 Cloud Function。


根據您的問題更新進行更新:

我了解到您想在刪除時刪除 Auth 服務中的用戶記錄。 為此,您可以編寫Cloud Function ,如下所示:

exports.deleteUser = functions.firestore
    .document('Students/{studentID}')
    .onDelete((snap, context) => {

        const deletedValue = snap.data();
        const userEmail = deletedValue.Email;

        return admin.auth().getUserByEmail(userEmail)
            .then(userRecord => {
                const userID = userRecord.uid;
                return admin.auth().deleteUser(userID)
            })
            .catch(error => {
                console.log(error.message);
                return null;
            })

    });

暫無
暫無

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

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